2013-02-19 96 views
4

我有一些附加到Android操作欄作爲選項卡的片段。我可以毫無問題地在它們之間切換。但是,如果其中一個片段有TextView(例如),並且我改變了該TextView的文本,如果我切換到另一個選項卡並返回,則不保留新文本。如何在操作欄選項卡/片段之間切換時維護狀態?

我試圖重寫onSaveInstanceState(),但現在看來,當我切換標籤不叫,因爲savedInstanceStatenull每次onActivityCreated()被稱爲(即該選項卡重新打開每次)。

我看着改變onPause(),使它調用onSaveInstanceState(),但onPause()不能訪問狀態包,所以我不明白我該怎麼做。

什麼是在標籤之間來回切換時保持標籤狀態的最佳方式?

回答

10

當您在片段之間切換時,不要分離剛剛隱藏的片段。例如:

@Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     FragmentManager fm = getFragmentManager(); 
     if(fm.findFragmentByTag(tab.getTag().toString()) == null){ 
      ft = fm.beginTransaction(); 
      FragmentContent contentfrag = new FragmentContent(); 
      ft.add(R.id.framelayout, contentfrag, tab.getTag().toString()); 
      ft.addToBackStack("BackStack" + tab.getTag().toString()); 
     } 
     else{ 
      Fragment frag = fm.findFragmentByTag(tab.getTag().toString()); 
      ft.show(frag); 
     } 
} 

    @Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     Fragment frag = this.getFragmentManager().findFragmentByTag(tab.getTag().toString()); 
    ft.hide(frag); 

} 
+0

這個例子中的fm是什麼? – haroba 2013-02-19 19:11:44

+0

FragmentManager fm = getFragmentManager(); – user1888162 2013-02-19 19:14:46

+0

if(fm.findFragmentByTag(tab.getTag()。toString())== null)在我的 上收到NullPointerException。 任何想法? – haroba 2013-02-19 19:46:18

相關問題