Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
nds3
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 9
1

После повторного вызова фрагмента переменные становятся null

20.05.2018, 13:50. Просмотров 261. Ответов 6

Первый раз фрагмент вызывается в методе onCreate, и все нормально выводиться. Если вызывается другой фрагмент, а потом снова первый, то выдает ошибку "Attempt to read from field 'int com.example.nds.podborodejdi2.MainActivity$Footbolka.id' on a null object reference". Хотя маяки, что значения присвоены срабатывают.
Присвоение данных
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
25
26
27
28
29
30
31
32
33
@Override
    public void SendFootbolki(boolean est, MainActivity.Footbolka[] footbolkas) {
        if(est)
        {
            for(int i=0;i<2;i++)
            {
                this.footbolkas[i]=footbolkas[i];
                Log.d(TAG,"Footbolki prisvoeni"+footbolkas[i].id);
            }
        }
        else
            footbolka_na_pokaz.id=R.drawable.footbloka_default;
    }
 
    @Override
    public void SendShtani(boolean est, MainActivity.Shtani[] shtanis) {
        if(est){
            shtani_na_pokaz=shtanis[0];
            Log.d(TAG,"Shtani prisvoeni"+shtanis.length);
        }
        else
            shtani_na_pokaz.id=R.drawable.shtani_default;
    }
 
    @Override
    public void SendObuv(boolean est, MainActivity.Obuv[] obuvs) {
        if(est){
            obuv_na_pokaz=obuvs[0];
            Log.d(TAG,"Obuv prisvoena"+obuvs.length);
        }
        else
            obuv_na_pokaz.id = R.drawable.obuv_default;
    }
использование
Java
1
2
3
4
imgsw1.setFactory(factory);
        footbolka_na_pokaz=footbolkas[0];
        Log.d("myTag","OnCreateView Присвоение и вывод id = "+footbolka_na_pokaz.id);
        imgsw1.setImageResource(footbolka_na_pokaz.id);
Вот, что выводит лог.

05-20 00:00:18.136 3945-3945/com.example.nds.podborodejdi2 D/myTag: Footbolki prisvoeni2131165287
Footbolki prisvoeni2131165288
Shtani prisvoeni3
Obuv prisvoena3
05-20 00:00:18.150 3945-3945/com.example.nds.podborodejdi2 D/myTag: OnCreateView Присвоение и вывод id = 2131165287
05-20 00:00:33.555 3945-3945/com.example.nds.podborodejdi2 D/myTag: Footbolki prisvoeni2131165287
Footbolki prisvoeni2131165288
Shtani prisvoeni3
Obuv prisvoena3
Ошибка java.lang.NullPointerException: Attempt to read from field 'int com.example.nds.podborodejdi2.MainActivity$Footbolka.id' on a null object reference
Ругается на строчку вызова лога, которая обращается к id
Java
1
2
3
4
imgsw1.setFactory(factory);
        footbolka_na_pokaz=footbolkas[0];
        Log.d("myTag","OnCreateView Присвоение и вывод id = "+footbolka_na_pokaz.id);
        imgsw1.setImageResource(footbolka_na_pokaz.id);
Добавлено через 10 часов 44 минуты
Я выяснил, что при повторном вызове, переменные получают значения, но перед функцией onAttach они становятся null

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2018, 13:50
Ответы с готовыми решениями:

Метод фрагмента onResume() перестает вызываться после вызова метода recreate() для Activity
Такая проблема:после вызова метода recreate() методы фрагментов onCreate() and...

Сохранить данные после первого открытия фрагмента
Добрый вечер. У меня есть несколько фрагментов. в одном из них, при входе в...

Приложение падает после вызова finish
Подскажите плз как. Такого я чес слово не ожидал, честно искал в сети не нашел....

Какой метод фрагмента срабатывает после закрытия диалога?
Запускаю FragmentActivity, в методе onResume запускаю DialogFragment. Пока...

Пустой список после вызова adapter.notifyDataSetChanged
При создании все норм. Пропадает только после обновления Фрагмент Context...

6
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
22.05.2018, 11:58 2
nds3, данные во фрагмент нужно передавать через Bundle.
1
nds3
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 9
22.05.2018, 19:11  [ТС] 3
Спасибо. Еще такой вопрос есть. Почему в первый раз передается нормально, а второй нет?
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
23.05.2018, 11:04 4
Цитата Сообщение от nds3 Посмотреть сообщение
Почему в первый раз передается нормально, а второй нет?
не гадалка, покажите код, как вы
вызываете второй фрагмент, а потом снова первый
1
nds3
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 9
23.05.2018, 16:53  [ТС] 5
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public void selectIterDrawer (MenuItem menuItem){
 
        switch (menuItem.getItemId()){
            case R.id.add:
                fragmentClass = AddFragment.class;
                break;
            case R.id.look:
                fragmentClass = LookFragment.class;
                break;
            case R.id.podbor:
                fragmentClass=PodborFragment.class;
                if(footbolkas_podhod!=null)
                    dataFromActivityToFragment.SendFootbolki(true,footbolkas_podhod);
                else
                    dataFromActivityToFragment.SendFootbolki(false,footbolkas_podhod);
                if(shtanis_podhod!=null)
                    dataFromActivityToFragment.SendShtani(true,shtanis_podhod);
                else
                    dataFromActivityToFragment.SendShtani(false,shtanis_podhod);
                if(obuvs_podhod!=null)
                    dataFromActivityToFragment.SendObuv(true,obuvs_podhod);
                else
                    dataFromActivityToFragment.SendObuv(false,obuvs_podhod);
                break;
 
 
        }
        try{
            myFragment = (android.support.v4.app.Fragment) fragmentClass.newInstance();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.frlya,myFragment).commit();
 
        menuItem.setChecked(true);
        setTitle(menuItem.getTitle());
        mDrawerLayout.closeDrawers();
    }
Добавлено через 1 минуту
А так я вызываю его в первый раз и передаю данные.
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
myFragment = null;
        fragmentClass=PodborFragment.class;
        try{
            myFragment = (android.support.v4.app.Fragment) fragmentClass.newInstance();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.frlya,myFragment).commit();
 
        dataFromActivityToFragment =(DataFromActivityToFragment)myFragment;
        if(footbolkas_podhod!=null)
            dataFromActivityToFragment.SendFootbolki(true,footbolkas_podhod);
        else
            dataFromActivityToFragment.SendFootbolki(false,footbolkas_podhod);
        if(shtanis_podhod!=null)
            dataFromActivityToFragment.SendShtani(true,shtanis_podhod);
        else
            dataFromActivityToFragment.SendShtani(false,shtanis_podhod);
        if(obuvs_podhod!=null)
            dataFromActivityToFragment.SendObuv(true,obuvs_podhod);
        else
            dataFromActivityToFragment.SendObuv(false,obuvs_podhod);
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
23.05.2018, 18:14 6
nds3, что это за ужас? кто вас научил так создавать фрагменты?
0
nds3
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 9
23.05.2018, 23:14  [ТС] 7
Уроки в интернете =(
0
23.05.2018, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2018, 23:14

Повторное создание фрагмента внутри фрагмента ViewPager
Доброго времени суток! Использую внутри фрагмента элемент ViewPager, который...

Как изменится стек после вызова активити другого приложения
Если у меня есть 2 задачи(2 Task) и я из первой задачи вызову активити, которое...

Вызов фрагмента из фрагмента с использованием EventBus
Доброго времени суток! Можно ли использовать EventBus для того, что из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru