2016-01-25 2 views
0

У меня есть одно действие, которое запускает фрагмент. Я открываю свой ящик навигации и перехожу ко второму фрагменту в ту же самую активность. Я вращаю устройство и вместо того, чтобы оставаться на этом втором фрагменте, я возвращаюсь к первому. Как вы можете сохранить текущий фрагмент, на котором вы находитесь, чтобы при уничтожении Activity он открыл соответствующий фрагмент? Вот что я пробовал, но он не работает. Это в моей деятельности:Сохранить текущий фрагмент в onSaveInstanceState

private FragmentTransaction ft; 
private Fragment fragment; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home_page); 

    if (findViewById(R.id.fragment_container) != null) { 
     if (savedInstanceState != null) { 

      fragment = getFragmentManager().getFragment(savedInstanceState,"currentFrag"); 
      ft.replace(R.id.fragment_container, fragment); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
      ft.commit(); 
     }else{ 
      fragment = new HomeFragment(); 
      // In case this activity was started with special instructions from an 
      // Intent, pass the Intent's extras to the fragment as arguments 
      fragment.setArguments(getIntent().getExtras()); 

      // Add the fragment to the 'fragment_container' FrameLayout 
      getFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, fragment).commit(); 
     } 
    } 

.....

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    getFragmentManager().putFragment(outState, "currentFrag", fragment); 
} 

Это исключение в моем журнале кошки

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.FragmentTransaction android.app.FragmentTransaction.replace(int, android.app.Fragment)' on a null object reference 

Очевидно, что текущий фрагмент не сохраняется. Как правило, это правильный способ решить эту проблему?

Этот вопрос не имеет ничего общего с общим пониманием того, что такое NullPointerException, а скорее как сохранить состояния фрагмента при повороте экрана.

+0

? Этот вопрос не имеет ничего общего с общим пониманием того, что такое NullPointerException, а скорее как сохранить состояния фрагмента при повороте экрана. –

ответ

1

В конструкторе фрагмент, добавьте следующую строку:

setRetainInstance(true); 

управления сохраняется ли экземпляр фрагмента через операцию повторного создания (например, от изменения конфигурации).

+0

Я все еще получаю то же исключение. Это в значительной степени говорит мне, что все, что я сохранил в методе onSaveInstanceState getFragmentManager(). PutFragment (outState, «currentFrag», фрагмент); Не распознается, когда он извлекается в методе onCreate Activity ... fragment = getFragmentManager(). GetFragment (savedInstanceState, "currentFrag"); –

+0

@MarkF избавиться от всего этого кода, эта одна строка делает все это – meda

+0

Отлично, спасибо –

0

Я не вижу, где вы инициализируете свой FragmentTransaction, извините. Возможно, вы пропустите это:

fragment = getFragmentManager().getFragment(savedInstanceState,"currentFrag"); 
ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.fragment_container, fragment); 
Смежные вопросы