2015-06-14 85 views
2

我在想,哪種方法可以更改碎片,將它們添加到堆棧中,並在屏幕旋轉後還原Visibile碎片。
目前,我用這個方法來初始化第一個片段:正確替換碎片

private void inflateInitialFragment() { 
    FragmentManager manager = getFragmentManager(); 
    Fragment mainFragment = manager.findFragmentByTag(MainMenuFragment.class.getSimpleName()); 
    FragmentTransaction ft = manager.beginTransaction(); 
    if (mainFragment == null) { 
     ft.replace(R.id.mainContainer, new MainMenuFragment(), MainMenuFragment.class.getSimpleName()); 
    } else if (!(mainFragment.isAdded() && !mainFragment.isDetached() && !mainFragment.isRemoving())) { 
     ft.replace(R.id.mainContainer, mainFragment, MainMenuFragment.class.getSimpleName()); 
    } 
    ft.commit(); 
    manager.executePendingTransactions(); 
} 

然後顯示新的片段我有這樣一個方法:

public void openAwards() { 
    getFragmentManager().beginTransaction().replace(R.id.mainContainer, 
    new AwardsFragment(), AwardsFragment.class.getSimpleName()).addToBackStack(null).commit(); 
} 

而回到主畫面:

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() == 0) { 
     super.onBackPressed(); 
    } else { 
     getFragmentManager().popBackStack(); 
    } 
} 

幾個屏幕旋轉之後,我有崩潰像這樣的:

java.lang.IllegalStateException: Fragment already added: MainMenuFragment{42c64d90 #0 id=0x7f0b003f MainMenuFragment} 

我應該如何更改可見片段並在屏幕旋轉後恢復它們?
我不認爲每次保存一些字符串或片段是恢復它們的好辦法。

+0

你可以請看看http://stackoverflow.com/questions/30779054/fragments-addtobackstack-closing-the-application/30780525#30780525問題 –

回答

1

如果您的Activity擴展了android.app.Activity,則不需要重寫onBackPressed()。它會自動彈出你的碎片。