2013-02-19 94 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

相关问题