4

Android アクション バーにタブとして多数のフラグメントが接続されています。問題なく切り替えることができます。ただし、フラグメントの 1 つにTextView(たとえば) があり、そのテキストを変更したTextView場合、別のタブに切り替えて戻ると、新しいテキストは保持されません。

をオーバーライドしようとしましonSaveInstanceState()たが、タブを切り替えるときに呼び出されないようです。呼び出さsavedInstanceStateれるnullたびonActivityCreated()に (つまり、そのタブが再度開かれるたびに) 呼び出されます。

onPause()を呼び出すように変更することを検討しましonSaveInstanceState()たがonPause()、状態バンドルにアクセスできないため、それを行う方法がわかりません。

タブ間を行ったり来たりするときにタブの状態を維持する最良の方法は何ですか?

4

1 に答える 1

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);

}
于 2013-02-19T18:59:26.337 に答える