2015-08-25 5 views
1

У меня есть основная деятельность с несколькими фрагментами. А вот как, как я включаю фрагментыNo Activity Error on Fragment after FindFragementByTag

У меня есть переменная INT в основной деятельности, что я обновляю из каждого фрагмента, чтобы определить, какой фрагмент был активен до изменения ориентации

private int ACTIVE_FRAGMENT = 0; 

Во время сохраненным например на операцию, я сохраняю INT как так

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putInt(Constants.ACTIVE_EVENT_ID, ACTIVE_FRAGMENT); 
    super.onSaveInstanceState(outState); 
} 

И onRestoreInstanceState я возвращаюсь к активному фрагменту, как этот

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    if (savedInstanceState != null){ 
     ACTIVE_FRAGMENT = savedInstanceState.getInt(Constants.ACTIVE_EVENT_ID); 
     if (ACTIVE_FRAGMENT > 0){ 
      FragmentManager fm = getSupportFragmentManager(); 
      switch (ACTIVE_FRAGMENT) { 
       case 1: 
        EventSetupFragmentOne fragmentOne = (EventSetupFragmentOne) fm.findFragmentByTag(Constants.SETUP_FRAGMENT_ONE_TAG); 
        if (fragmentOne != null) { 
         openFragment(fragmentOne, getString(R.string.event_setup_title_1), Constants.SETUP_FRAGMENT_ONE_TAG); 
        } 
        break; 
      } 
     } 
    } 
} 

Это восходит к активному фрагменту, но затем бросает Нет Actitiy найдено исключение

Caused by: java.lang.IllegalStateException: No activity 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1125) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120) 
      at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1929) 

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

ответ

1

При изменении конфигурации вам не нужно звонить openFragment. Фрагменты будут воссозданы каркасом.

Именно поэтому в методе onCreate вы не инициализируете свои фрагменты, если savedInstanceState == null.

+0

Благодарим вас за отзыв, но у меня есть 8 фрагментов, и мне нужно сказать, какой из них нужно воссоздать? –

+0

, если изменение конфигурации - это поворот экрана, тогда вам не обязательно! – pelotasplus

+0

Спасибо, что работает –

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