Фрагмент не привязан к моей активности

Прежде всего, я использую библиотеку поддержки (android-support-v4.jar) для использования фрагментов.

У меня есть активность с макетом, содержащим фрагмент. Поэтому, когда активность начинается, она вызывает метод onCreateView моего фрагмента. В этом методе я раздул макет (содержащий линейный макет и список в нем) и вернул этот раздутый вид.

Поэтому, когда действие начинается, оно загружает мой список и вызывает веб-сервис, а в ответ веб-сервис загружает данные в список.

Все работает идеально, как и ожидалось. Но проблема в том, когда я нажимаю кнопку "Назад" и перезапускаю активность, она не прикрепляет мой фрагмент к активности и выдает исключение IllegalStateException, когда я пытаюсь вызвать getActivity(). А также выбрасывает NullPointerException, когда я пытаюсь вызвать метод getView() моего фрагмента.

Еще одна вещь, которую следует упомянуть: когда я вижу иерархию представлений из инструмента TraceView, он показывает там представления фрагментов.

Помогите пожалуйста мне!


comment
есть ли удача после этого времени? у меня похожая проблема   -  person quinestor    schedule 11.04.2013
comment
Я разместил ответ ниже. Может быть, это может помочь вам   -  person Pirate    schedule 12.04.2013
comment
спасибо, я прочитал   -  person quinestor    schedule 13.04.2013
comment
Это поможет вам решить вашу проблему?   -  person Pirate    schedule 15.04.2013


Ответы (1)


Я понял проблему и, следовательно, решил ее. Я использовал интерфейс Observer, чтобы получить ответ от веб-службы. Итак, когда я впервые запустил действие, я добавил (или зарегистрировал) свою активность фрагмента в класс Observable и получил ответ, но забыл удалить (или отменить регистрацию) мой объект фрагмента, когда он был уничтожен. Поэтому, когда действие и фрагмент перезапускаются, он снова добавляет мой объект фрагмента в класс Observable, так что теперь класс Observable теперь имеет два экземпляра фрагмента, первый из которых был уничтожен, и вызывается текущий фрагмент и веб-служба, и он сначала отвечает уничтоженным фрагментом и на этот раз он рухнет. Итак, я удалил экземпляр фрагмента из класса Observable в методе фрагмента onDestroy, и теперь он работает.

Так что проблема не в фрагментах, а в нескольких экземплярах моего фрагмента.

person Pirate    schedule 12.04.2013
comment
как вы диагностируете эти два экземпляра одного и того же фрагмента, я получаю одну и ту же ошибку в случае viewpager + fragmetn - person Erum; 19.08.2015
comment
Не могли бы вы объяснить, что происходит в вашем случае, чтобы я мог лучше понять ситуацию. - person Pirate; 19.08.2015
comment
у меня есть основная активность, которая имеет так много фрагментов ---› из которых один фрагмент (profileFragment ) содержит viewpager + designtablayout ---› и его адаптер viewpager был инициализирован из фрагментов ----> Profilefragment содержит кнопку при нажатии кнопки i m замена фрагмента из этого кода pastie.org/10361207, причем новый фрагмент содержит ключ возврата .....› i нажмите клавишу «Назад», и я просто вытащу стек из фрагментов - person Erum; 19.08.2015
comment
теперь я пришел к тому же ProfileFragment, но проблема в том, что -----› на этот раз мое приложение должно отображать ту же выбранную вкладку, которая была во время нажатия кнопки .....› поэтому, как только я попытался изменить страницу, мое приложение вылетело говоря, что мой фрагмент не привязан к какой-либо деятельности? - person Erum; 19.08.2015
comment
Я думаю, вам нужно снова инициализировать адаптер пейджера, так как когда вы заменили свой ProfileFragment на EditUserProfileFragment, он уничтожит существующий ProfileFragment. Поэтому, когда вы нажимаете кнопку «Назад», он воссоздается, и вам нужно снова инициализировать адаптер пейджера здесь. - person Pirate; 24.08.2015
comment
любая идея, как использовать эту библиотеку с переданным массивом github.com/TonicArtos/StickyGridHeaders/blob/master/Library/src/ как для разделов, так и для содержимого разделов - person Erum; 24.08.2015
comment
Я нашел этот код неполным, потому что он не показывает логику того, как этот класс различает то, что является заголовком или что является элементом. Кроме того, вы должны расположить свой массив в том же порядке, в котором вы хотите, чтобы он отображался. Ваш arraylist будет содержать данные как для заголовков, так и для элементов. Вы передадите свой массив с идентификаторами макета заголовка и элемента этому конструктору класса и установите его в свой список. Вот и все. - person Pirate; 25.08.2015
comment
эта библиотека содержит код, для которого один является заголовком, а другой является элементом. У меня есть два списка массивов..... один содержит раздел Заголовок, другой содержит массив объектов f, содержит два массива, один для privateList[] , другой для publicList[], но я не понимаю, как я буду рендерить? - person Erum; 25.08.2015
comment
Согласно коду, который вы мне прислали, используя только один массив, который содержит как заголовки, так и элементы. И еще одно, я думаю, вы должны задать это как отдельный вопрос, потому что ваш вопрос не связан с этой страницей. - person Pirate; 26.08.2015