2013-04-26 3 views
0

У меня есть приложение. используя Фрагменты. Основная активность начинается с 2 фрагментов. Один из этих фрагментов содержит кнопку, которая используется для добавления 3'rd фрагмента во время выполнения, как это:Сохранение фрагмента, добавленного во время выполнения

button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Activity activity = getActivity(); 

      if (fragment3 == null) { 
       getFragmentManager() 
       .beginTransaction() 
       .add(R.id.fragment_content3, new ThirdFragment()) 
       .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 
       .commit(); 
     } 

ThirdFragment класс выглядит следующим образом:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.v(getTag(), "FRAG onCreate CALLED!"); 
    this.setRetainInstance(true); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

View view = inflater.inflate(R.layout.third_fragment, container, false); 
return view; 

Проблема заключается в том, что я не могу понять как сохранить просмотр этого фрагмента при восстановлении активности. Я попытался @Override метод onCreate() и использовать setRetainInstance (true) безрезультатно.

Итак, мой вопрос:

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

ответ

0

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

Система вызывает onSaveInstanceState(), прежде чем сделать деятельность уязвимой для уничтожения. Система передает этот метод Bundle, в котором вы можете сохранять информацию о состоянии активности как пары имя-значение, используя такие методы, как putString() и putInt(). Затем, если система убивает ваш процесс подачи заявки и пользователь переходит к вашей активности, система воссоздает активность и передает пакет как onCreate(), так и onRestoreInstanceState(). Используя любой из этих методов, вы можете извлечь сохраненное состояние из Bundle и восстановить состояние активности. Если нет информации о состоянии для восстановления, тогда переданный вам пакет пуст (это тот случай, когда активность создается впервые). Android Documentation

Решение:

Итак, у вас есть только расслоение внутри метода onSaveInstanceState(), чтобы сохранить информацию о вашем фрагменте, и как фрагмент представляет собой сложный объект, вы не можете сохранить его непосредственно в пачке.

Мое предложение: @override onSaveInstanceState() и использовать флаг boolean, чтобы указать, должен ли быть прикреплен ваш третий фрагмент (видимый). Вскоре вы можете использовать OnCreate() or onRestoreInstanceState() и получить пакет для чтения своего флага, и в зависимости от него вы можете создать или не удалить фрагмент.

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