Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Восстановление позиции ListView по возвращении из другого Activity

Доброго времени суток.

Имеется activity с ListView, заполняемого из базы данных. При нажатии элемента идёт переход на новое активити с передачей в него данных. По возвращении обратно хотелось бы, чтобы позиция списка сохранялась. Пересмотрел кучу ответов и пробовал все варианты - ни один не работает, при возвращении список отображается сначала, уже не знаю как решить проблему. Последний вариант выглядит так:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import java.sql.SQLException;
 
public class ElectroActivity extends AppCompatActivity {
 
    EditText objectFilter;
    ListView objectList;
    DatabaseHelper sqlHelper;
    Cursor userCursor;
    SimpleCursorAdapter userAdapter;
    //Parcelable state;
    private static final String LIST_STATE = "listState";
    private Parcelable mListState = null;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_electro);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        objectFilter = (EditText)findViewById(R.id.objectFilter);
        objectList = (ListView)findViewById(R.id.objectList);
        sqlHelper = new DatabaseHelper(getApplicationContext());
        // создаем базу данных
        sqlHelper.create_db();
       }
 
    @Override
    protected void onRestoreInstanceState(Bundle state) {
        super.onRestoreInstanceState(state);
        mListState = state.getParcelable(LIST_STATE);
    }
 
    @Override
    public void onResume(){
        super.onResume();
        try {
            sqlHelper.open();
            userCursor = sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE, null);
            String[] headers = new String[]{DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_ENERGY,
                DatabaseHelper.COLUMN_SET, DatabaseHelper.COLUMN_ID};
            userAdapter = new SimpleCursorAdapter(this, R.layout.my_list_item,
                userCursor, headers, new int[]{R.id.textname, R.id.textenergy, R.id.textset}, 0);
 
            objectList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Cursor cursor = (Cursor)objectList.getItemAtPosition(position);
 
                    Intent intent = new Intent(getApplicationContext(), ElDataActivity.class);
                    //intent.putExtra("id",cursor.getString(userCursor.getColumnIndex("_id")));
                    intent.putExtra("object", cursor.getString(userCursor.getColumnIndex("objects")));
                    intent.putExtra("balans", cursor.getString(userCursor.getColumnIndex("balans")));
                    intent.putExtra("napr", cursor.getString(userCursor.getColumnIndex("napr")));
                    intent.putExtra("numTP", cursor.getString(userCursor.getColumnIndex("numTP")));
                    intent.putExtra("numTR", cursor.getString(userCursor.getColumnIndex("numTR")));
                    intent.putExtra("sumTR", cursor.getString(userCursor.getColumnIndex("sumTR")));
                    intent.putExtra("set", cursor.getString(userCursor.getColumnIndex("set")));
                    intent.putExtra("energy", cursor.getString(userCursor.getColumnIndex("energy")));
                    intent.putExtra("kat", cursor.getString(userCursor.getColumnIndex("kat")));
                    intent.putExtra("razr", cursor.getString(userCursor.getColumnIndex("pazr")));
                    intent.putExtra("ust", cursor.getString(userCursor.getColumnIndex("ust")));
                    /*intent.putExtra("balans", DatabaseHelper.COLUMN_BAL);*/
                    //state = objectList.onSaveInstanceState();
                    startActivity(intent);
                }
            });
 
            // если в текстовом поле есть текст, выполняем фильтрацию
            // данная проверка нужна при переходе от одной ориентации экрана к другой
            if(!objectFilter.getText().toString().isEmpty())
                userAdapter.getFilter().filter(objectFilter.getText().toString());
 
            // установка слушателя изменения текста
            objectFilter.addTextChangedListener(new TextWatcher() {
 
                public void afterTextChanged(Editable s) {
                }
 
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }
                // при изменении текста выполняем фильтрацию
                public void onTextChanged(CharSequence s, int start, int before, int count) {
 
                    userAdapter.getFilter().filter(s.toString());
                }
            });
 
            // устанавливаем провайдер фильтрации
            userAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                @Override
                public Cursor runQuery(CharSequence constraint) {
 
                    if (constraint == null || constraint.length() == 0) {
 
                        return sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE, null);
                    } else {
                        return sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE + " where " +
                                DatabaseHelper.COLUMN_NAME + " like ?", new String[]{"%" + constraint.toString() + "%"});
                    }
                }
            });
 
            //сохраняем положение ListView
            //Parcelable state = objectList.onSaveInstanceState();
 
            //обновляем ListView
            if (mListState != null) {
                objectList.onRestoreInstanceState(mListState);
                mListState = null;
            }
            objectList.setAdapter(userAdapter);
 
            //Восстанавливаем положение ListView
            //objectList.onRestoreInstanceState(state);
            //if(state != null) {
            //    objectList.onRestoreInstanceState(state);
            //}
            //userAdapter.notifyDataSetChanged();
 
        }
        catch (SQLException ex){}
    }
 
    @Override
    protected void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);
        mListState = objectList.onSaveInstanceState();
        state.putParcelable(LIST_STATE, mListState);
    }
 
    /*@Override
    public void onPause() {
        state = objectList.onSaveInstanceState();
        super.onPause();
    }*/
 
    @Override
    public void onDestroy(){
        super.onDestroy();
        // Закрываем подключения
        sqlHelper.database.close();
        userCursor.close();
        //state = objectList.onSaveInstanceState();
    }
 
}
Подскажите, в чем загвоздка?
Ответ:
Цитата Сообщение от gelios_oleg Посмотреть сообщение
@Override public void onBackPressed(){
super.onBackPressed();
}
Поскольку вы не переопределяете действия по обработке кнопки "Назад", то этот код лишний. Хорошо, что super.onBackPressed() не забыли, а то кнопка "Назад" перестала бы работать (на этом и основан принцип её отключения).
Да, действительно забыл убрать, во время экспериментов появилось

Цитата Сообщение от gelios_oleg Посмотреть сообщение
//восстанавливаем положение ListView при возврате с дочернего окна
objectList.onRestoreInstanceState(state);
Этот код мне пока не известен и я боюсь, что тут может быть проблема, если objectList = null, но тему не штудировал. Я обычно использую onSaveInstanceState. Но в данном случае это не требовалось, если есть onActivityResult.
Позже, я поставил проверку на null.
Вопрос: Передать данные при клике на listview в другое activity

Подсксжите пожалуйста, как мне при клике на listview заполненный с помощью sdimplecursoradapter передеавать данные в другое activity для вывода подробной информации?


Вот что я делаю в главном activity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        String[] from = new String[]{db.KEY_AUTHOR, db.KEY_TITLE, db.KEY_RATE, db.KEY_DATE, db.KEY_THUMB,db.KEY_GARE};
        int[] to = new int[]{R.id.txtRowDesc, R.id.txtRowTitle, R.id.txtRowRate, R.id.txtRowDate, R.id.thumb,R.id.txtRowGanre};
 
        scAdapter = new SimpleCursorAdapter(getActivity(), R.layout.row_list, cursor, from, to);
        listview.setAdapter(scAdapter);
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(getContext(),BookActivity.class);
                intent.putExtra("Position",i);
                startActivity(intent);
            }
        });
        registerForContextMenu(listview);
        return view;
    }
A вот код в том activity куда мне нужно перейти

Java
1
2
 Intent intent = getIntent();
        pos=intent.getExtras().getInt("Position");
Ответ: rockstarone, думаю, Вам надо начать с "Hello, World"
Вопрос: Передать массив в другую Activity

Добрый день, хотел узнать как передать массив в другую активность, что бы в дальнейшем можно было из массива вытаскивать значения и записывать эти значения в listview.

Тоесть у меня есть два массива они заполняются в pullparsere когда он находит определенный старт тэг <group> в один массив идут значения nexttext(); в другой getattributevalue(0);

Вот массив с текстом надо отобразить в другой активити в Listview, а значения атрибутов просто передать в активность что бы можно было с ними работать...

Добавлено через 3 часа 46 минут
Вот так передаю:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
    Bundle b=new Bundle();                                
                b.putStringArray("key1", cats);
            Intent activ=new Intent(MainActivity.this, AboutActivity.class);
            activ.putExtras(b);
                startActivity(activ);
Вот так я принимаю значения:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
     public void onClick(View v){
        String key1 ="";
        Bundle b=this.getIntent().getExtras();
        String[] catsarray=b.getStringArray(key1);                        <----- catsarray всегда null
        ListView lvMain = (ListView) findViewById(R.id.listView1);
 
        // создаем адаптер
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, catsarray);
        // присваиваем адаптер списку
        lvMain.setAdapter(adapter);
        
    }
Но почему то значение catsarray всегда приходить null... Помогите пожалуйста понять почему...

Добавлено через 10 минут
А все нашел ошибку...
Код Java(TM) 2 Platform Standard Edition 5.0
1
String key1=""
нужно убрать, а
Код Java(TM) 2 Platform Standard Edition 5.0
1
String[] catsarray=b.getStringArray("key1");
ключ взять в кавычки... Но возник следующий вопрос... После этого всего вылетает ошибка NullPointerException подскажите в чем может быть дело ?

Добавлено через 24 минуты
Ошибка NullPointException решена... Возникала из за того что у меня был массив заданной длины 50 но он не наполнялся целиком и имел вид [item1,item2,item3,null,null.....null] из за этих null и возникала ошибка, так как listview не мог их прочитать...

Решение: вместо массива использовать Arraylist
Ответ:
Цитата Сообщение от Паблито Посмотреть сообщение
не логичнее ли сохранять массив только если вызван onPause/onStop ?
Сохранится то ведь не то поле, а его копия и потом либо придется назначать тому полю значение из копии, либо использовать две переменные для одного массива. Оба варианта тянут за собой кучу проблем.
Вопрос: Вызвать из одной activity функцию другой activity

вызвать из одного activity функцию другой activity
Подскажите, можно ли такое реализовать?
Допустим у меня есть основная активити и дополнительная,при переходе в дополнительную там по нажатию кнопки должна вызываться функция из основной активити. Как это сделать? Если нельзя,то посоветуйте что можно сделать?
Ответ:
Сообщение от Rrjke
Как это сделать?
через статическую переменную, но лучше так не делать так как фоновая активити может быть мертвой
Вопрос: переход на другую activity c пункта listview

Здравствуйте, помогите пожалуйста, может быть кто-нибудь знает, как открыть другую форму, при нажатии на один пункт элемента listview? AndroidStudio.
Ответ:
Вот, кусок из . Пояснения нужны?

Код

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView list = (ListView) findViewById(R.id.main_list);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4) {
                    switch (p3) {
                        case 0:
                            startActivity(new Intent(MainActivity.this, ObjectsRemoteActivity.class));
                            break;
                                                // И дальше аналогично case 1:, case 2: ...
                    }
                }
        });
    }

Вопрос: Дело в коде или глюк Студио? Один из пунктов ListView не работает

Здравствуйте, подскажите пожалуйста, где проблема, всю голову сломал уже. С помощью ListView сделал меню, названия пунктов меню берутся из массива, расположенный в ресурсах. Каждый пункт меню должен запускать отдельное активити. Все пункты меню работают, кроме 3-го (else if (position == 2) {...}). При нажатии на него приложение вылетает с сообщением "В приложение таком-то произошла ошибка".

Вот код слушателя ListView, который обрабатывает клики по пунктам, он находится в MainActivity.java в методе @Override protected void onCreate(Bundle savedInstanceState) {...}:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView a, View v, int position, long id) {
 
        if (position == 0) {
             Intent intent = new Intent(MainActivity.this, M01.class);
             startActivity(intent);
        } else if (position == 1) {
             Intent intent = new Intent(MainActivity.this, M02.class);
             startActivity(intent);
        } else if (position == 2) {               // < --- злополучный пункт 3
             Intent intent = new Intent(MainActivity.this, M03.class);
             startActivity(intent);
        } else if (position == 3) {
             Intent intent = new Intent(MainActivity.this, M04.class);
             startActivity(intent);
 
                ~ тоже самое до 8 ~
 
        } else if (position == 8) {
             Intent intent = new Intent(MainActivity.this, M09.class);
             startActivity(intent);
        }
    }
});
Если вместо M03.class написать, допустим M06.class, то все работает. Если создать новый класс с любым именем, и скормить вместо M03.class, то снова все вылетает.

Я даже удалил все из класса M03.class, оставил только строку public class M03 extends AppCompatActivity { }, все равно вылетает.

Может это глюк самой среды Андроид Студио?
Ответ:
Сообщение от powowstal
Только 2 вопроса, логи ошибки... где они? И можем ли мы доверять Харви Денту!
Но если погадать на цыганских картах то ест предположение что M03.class не имеет своего отображение, View подключен?
Извините, я новичок, не уверен они ли. Посмотрите пожалуйста, логи ниже под спойлером.

Вью я подключал и отключал, все равно вылетает. В ходе эксперимента, у других классов тоже убирал отображение, но приложение не выскакивало, оно просто ничего не отображало.

Кликните здесь для просмотра всего текста


01/16 12:14:55: Launching MainActivity
$ adb shell am start -n "app.mypro/app.mypro.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 2139 on device unknown-custom_phone___5_0_0___api_21___768x1280-192.168.157.101:5555
I/InstantRun: Instant Run Runtime started. Android package is app.mypro003, real application class is null.
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
D/OpenGLRenderer: Render dirty regions requested: true

[ 01-16 02:14:57.010 2139: 2139 D/ ]
HostConnection::get() New Host Connection established 0xeb8a11c0, tid 2139
D/Atlas: Validating map...
D/libEGL: loaded /system/lib/egl/libEGL_emulation.so
D/libEGL: loaded /system/lib/egl/libGLESv1_CM_emulation.so
D/libEGL: loaded /system/lib/egl/libGLESv2_emulation.so

[ 01-16 02:14:57.336 2139: 2158 D/ ]
HostConnection::get() New Host Connection established 0xe2b16120, tid 2158
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Enabling debug mode 0
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe2b19240, error=EGL_SUCCESS
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.mypro003, PID: 2139
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.mypro/app.mypro.M03}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at app.mypro.M03.onCreate(M03.java:31)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)*
at android.app.ActivityThread.access$800(ActivityThread.java:144)*
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)*
at android.os.Handler.dispatchMessage(Handler.java:102)*
at android.os.Looper.loop(Looper.java:135)*
at android.app.ActivityThread.main(ActivityThread.java:5221)*
at java.lang.reflect.Method.invoke(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:372)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)*


Сообщение от vxg
androbv, мои ставки - M03 нет в манифесте
Действительно, вы правы, в манифесте не было, я уже было обрадовался, добавил. Но приложение все также вылетает. Я выложил лог под спойлер, можете ли тоже глянуть.

Добавлено через 4 минуты
Файл манифеста.

Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.mypro003">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <activity
            android:name=".M01"
            android:label="Меню 01">
        </activity>
        <activity
            android:name=".M02"
            android:label="Меню 02">
        </activity>
        <activity
            android:name=".M03"
            android:label="Меню 03">
        </activity>
        <activity
            android:name=".M04"
            android:label="Меню 04">
        </activity>
        <activity
            android:name=".M05"
            android:label="Меню 05">
        </activity>
        <activity
            android:name=".M06"
            android:label="Меню 06">
        </activity>
        <activity
            android:name=".M07"
            android:label="Меню 07">
        </activity>
        <activity
            android:name=".M08"
            android:label="Меню 08">
        </activity>
        <activity
            android:name=".M09"
            android:label="Меню 09">
        </activity>
        <activity
            android:name=".ViewActivity" >
        </activity>
    </application>
</manifest>


Добавлено через 13 минут
Спасибо всем большое за отклик! Все, заработало.
Оказывается, пока экспериментировал, удалил ListView из Активити, который должен запускать M03.class. Поэтому, несмотря на добавление в манифест, приложение снова вылетало с той же ошибкой. Последний ответ на счет Манифеста стал ключевым, действительно забыл в манифест добавить!
Спасибо всем большое!
Вопрос: Переход к Activity по выбранному пункту из спиннера

Есть два спиннера со списками, нужно что б каждый элемент различных спиннеров пересылал в свои зарезервированные классы
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.example.user.algebra;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ExpandableListView;
import android.widget.Spinner;
import android.widget.Toast;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
 
import java.util.ArrayList;
import java.util.List;
 
public class GlavnoeMenu extends Activity implements OnItemSelectedListener{
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.glavnoe_menu);
 
        //Инициализируем элемент Spinner:
        Spinner spinner = (Spinner) findViewById(R.id.spinner);
 
        //Настраиваем слушатель нажатий Spinner(Click Listener в смысле):
        spinner.setOnItemSelectedListener(this);
 
        //Создаем массив элементов выпадающего списка:
        List<String> elements = new ArrayList<String>();
        elements.add("Числа");
        elements.add("Натуральные");
        elements.add("Целые");
        elements.add("Рациональные");
        elements.add("Иррациональные");
        elements.add("Действительные");
        elements.add("Комплексные");
 
 
 
        //Создаем для spinner адаптер:
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, elements);
 
        //Настраиваем внешний вид выпадающего списка, используя готовый системный шаблон:
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
        //Присоединяем адаптер данных к spinner:
        spinner.setAdapter(dataAdapter);
 
 
 
 
 
 
        Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
 
        //Настраиваем слушатель нажатий Spinner(Click Listener в смысле):
        spinner1.setOnItemSelectedListener(this);
 
        //Создаем массив элементов выпадающего списка:
        List<String> elements1 = new ArrayList<String>();
        elements1.add("Величины");
        elements1.add("Коэффициент");
        elements1.add("Параметризирванные");
        elements1.add("Аргумента");
        elements1.add("Функции");
        elements1.add("Корреляции");
 
        //Создаем для spinner адаптер:
        ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, elements1);
 
        //Настраиваем внешний вид выпадающего списка, используя готовый системный шаблон:
        dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
        //Присоединяем адаптер данных к spinner:
        spinner1.setAdapter(dataAdapter1);
 
    }
 
 
 
 
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //Выбираем элемент выпадающего списка:
 
        if (id==1) {
            Intent i = new Intent(GlavnoeMenu.this, NaturChisla.class); // RedaktPredm.class - Имя класса начинается с верхнего регистра!!
            startActivity(i);
        }
        if (id==2) {
            Intent i = new Intent(GlavnoeMenu.this, RacionChisla.class); // RedaktPredm.class - Имя класса начинается с верхнего регистра!!
            startActivity(i);
        }
        if (id==1) {
            Intent j = new Intent(GlavnoeMenu.this, Koeficienty.class); // RedaktPredm.class - Имя класса начинается с верхнего регистра!!
            startActivity(j);
        }
 
 
    }
 
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
 
    }
}
Ответ:
Сообщение от Dzirt007
//Выбираем элемент выпадающего списка:
но, наверное, для начала, т.к. слушатель один для двух компонентов, то стоит выбрать какой же компонент из двух сейчас обращается к слушателю

да и вообще, рекомендую пересмотреть структуру и хотя бы записать все ваши данные в какой-то Map <Position, ActivityClass>, а то судя по количеству данных у вас в коллекциях, перебирать ифами замучаетесь
Вопрос: Переход на другой Activity

Здравствуйте. Написал вроде простой код
Java
1
2
3
public void onClickBP(View view) {
        Intent intent= new Intent(this, blokipitaniya.class);
        startActivity(intent);
Но при клике выдает ошибку. На 5 сайтах это делается таким вот примером ,а у меня ошибка. Есть предположение ,что проблема во втором активити как раз. Подскажите пожалуйста.
Вот лог ошибок:
Кликните здесь для просмотра всего текста
05-04 00:50:50.997 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:50.999 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:50.999 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.000 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.005 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.009 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.009 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.018 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.029 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.032 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:51.036 4436-4436/comvolandrr.vk.cc E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method comvolandrr.vk.cc.MainActivity.access$super
05-04 00:50:52.667 4436-4436/comvolandrr.vk.cc E/AndroidRuntime: FATAL EXCEPTION: main
Process: comvolandrr.vk.cc, PID: 4436
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
at android.view.View.performClick(View.java:4463)
at android.view.View$PerformClick.run(View.java:18770)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:4463)*
at android.view.View$PerformClick.run(View.java:18770)*
at android.os.Handler.handleCallback(Handler.java:808)*
at android.os.Handler.dispatchMessage(Handler.java:103)*
at android.os.Looper.loop(Looper.java:193)*
at android.app.ActivityThread.main(ActivityThread.java:5292)*
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)*
at dalvik.system.NativeStart.main(Native Method)*
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {comvolandrr.vk.cc/comvolandrr.vk.cc.blokipitaniya}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1634)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1430)
at android.app.Activity.startActivityForResult(Activity.java:3457)
at android.app.Activity.startActivityForResult(Activity.java:3418)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784)
at android.app.Activity.startActivity(Activity.java:3660)
at android.app.Activity.startActivity(Activity.java:3628)
at comvolandrr.vk.cc.MainActivity.onClickBP(MainActivity.java:35)
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)*
at android.view.View.performClick(View.java:4463)*
at android.view.View$PerformClick.run(View.java:18770)*
at android.os.Handler.handleCallback(Handler.java:808)*
at android.os.Handler.dispatchMessage(Handler.java:103)*
at android.os.Looper.loop(Looper.java:193)*
at android.app.ActivityThread.main(ActivityThread.java:5292)*
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)*
at dalvik.system.NativeStart.main(Native Method)*
Ответ: Mikalai, забыл про манифест ,а в логе ,что-то не заметил этого. Спасибо большое.
Вопрос: Переход на другой activity по нажатию на элемент ExpandableListView

Здравствуйте! не могу осуществить переход на другой активити по нажатию на элемент дерева-списка! Делаю так но не работает:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
elvMain.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                if (groupPosition==0 && childPosition == 0) {
                    Intent i = new Intent(getApplicationContext(),redaktPredm.class);
                    startActivity(i);
                }
            }
        });
Ответ: Попробуй убрать анонимный класс и просто имплементировать интерфейс.
Вопрос: Подскажите у кого происходит вылет при переходе на Activity

java.lang.NullPointerException

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bastion.teplocomgsm10/com.bastion.teplocomgsm10.NNSSS}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.bastion.teplocomgsm10.NNSSS.onStart(NNSSS.java:829)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178)
at android.app.Activity.performStart(Activity.java:5198)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2083)
... 11 more

Как находите и боритесь?Ставлю+.
Ответ: androbro,
Основная статья: Код с запашком

Во многом при рефакторинге лучше полагаться на интуицию, основанную на опыте. Тем не менее имеются некоторые видимые проблемы в коде (англ. code smells), требующие рефакторинга:
1.дублирование кода;
2.длинный метод;
3.большой класс;
4.длинный список параметров;
5.«жадные» функции — это метод, который чрезмерно обращается к данным другого объекта;
6.избыточные временные переменные;
7.классы данных;
8.несгруппированные данные.