2013-03-21 3 views
3

У вас есть вопрос относительно пакета savedInstanceState, который вы получаете по обратным вызовам фрагмента, когда первый фрагмент создан, а затем снова привязан к активности.Android: использование savedInstanceState с фрагментами

Таким образом, я использую setRetainInstance (true), в результате фрагмент не должен быть уничтожен, а просто не привязан к активности, когда действие уничтожается и затем повторно присоединяется назад, когда активность воссоздается при изменении конфигурации, например.

Таким образом, потому что с помощью этого setRetainInstance (истина), это приведет к savedInstanceState сверток к ВСЕГДА быть пустым в обратных вызовов фрагмента, таких как: onActivityCreated(), onCreate() и т.д.

До сих пор так хорошо, теперь я получение некоторых сбоев от некоторых пользователей (действительно очень маленькое число), которое вызвано тем, что this savedInstanceState не является нулевым по фрагменту.

Итак, onActivityCreated() обратного вызова делает что-то вроде этого:

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     adapter = new CustomAdapter(getActivity(), getListView(), data, savedInstanceState); 
     setListAdapter(adapter); 
     setupEmptyListView(); 
     getListView().setOnScrollListener(this); 
    } 

CustomAdapter звонит какой-то момент из его конструкторе создается loadInstanceState() метод, который делает свою работу, код ниже:

@Override 
    public void loadInstanceState(Bundle savedInstanceState) { 
     if (savedInstanceState != null) { 
     //do some stuff which is causing a crash 
     } 
    } 

Теперь мой вопрос заключается в том, как можно попасть в этот оператор if, когда файл savedInstanceState, который я передаю, всегда должен иметь значение null.

И теперь ВОПРОС:

ли Android гарантировать, что при использованииsetRetainInstance(true)на фрагменте сверток savedInstanceState, который передается в функции обратного вызова будет ВСЕГДА быть пустым?

Благодарим за ответы ребятам!

+0

Мне кажется, что вам необходимо [метод onSaveInstance] (https://www.google.com.vn/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDcQFjAB&url=http%3A%2F % 2Fstackoverflow.com% 2Fquestions% 2F9938862% 2Fandroid-и-onsaveinstance-и-восстановления и е = Mck8U7rOG-H-iAfT14GIBw & USG = AFQjCNHfPxzq_Bjd9wFV8GKtFpzwXx30ZQ & Sig2 = Zy7or38dyhnDfoF4VEUxEQ & BVM = bv.63934634, d.aGc) –

ответ

1

Я не нашел упоминания о том, что пакет savedInstanceState должен быть пустым в этом случае. official documentation говорит:

общественного недействительный setRetainInstance (логическое сохранение) является

Control ли экземпляр фрагмента сохраняется через активность воссоздание (например, от изменения конфигурации). Это может использоваться только с фрагментами, не находящимися в задней части. Если установлено, жизненный цикл фрагмента будет несколько отличаться, когда активность воссозданы:

OnDestroy() не будет вызываться (но onDetach() будет по-прежнему, потому что фрагмент в настоящее время отделена от ее текущей деятельности) ,

onCreate (Bundle) не будет называться, так как фрагмент не является воссоздан.

onAttach (Activity) и onActivityCreated (Bundle) будет все еще называться.

ИМХО это главное отличие - изменение жизненный цикл.

+0

ОК, спасибо за обмен, что. Возможно, в документации отсутствует здесь тот аспект, что saveInstanceState в этом случае будет пустым. Я сам отлаживал его, а также читал некоторые сообщения, и кажется, что все признают одно и то же. –

Смежные вопросы