Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在操作栏选项卡/片段之间切换时如何保持状态?_Java_Android - Fatal编程技术网

Java 在操作栏选项卡/片段之间切换时如何保持状态?

Java 在操作栏选项卡/片段之间切换时如何保持状态?,java,android,Java,Android,我在安卓操作栏上贴了很多标签。我可以毫无问题地在它们之间切换。但是,如果其中一个片段具有TextView(例如),并且我更改了该TextView的文本,则如果切换到另一个选项卡并返回,则不会保留新文本 我尝试过重写SaveInstanceState(),但在切换选项卡时,似乎没有调用它,因为每次调用onActivityCreated()时(即每次重新打开选项卡时),savedInstanceState都是null 我研究了如何修改onPause(),以便它调用onSaveInstanceStat

我在安卓操作栏上贴了很多标签。我可以毫无问题地在它们之间切换。但是,如果其中一个片段具有
TextView
(例如),并且我更改了该
TextView
的文本,则如果切换到另一个选项卡并返回,则不会保留新文本

我尝试过重写SaveInstanceState(),但在切换选项卡时,似乎没有调用它,因为每次调用
onActivityCreated()
时(即每次重新打开选项卡时),
savedInstanceState
都是
null

我研究了如何修改
onPause()
,以便它调用
onSaveInstanceState()
,但是
onPause()
没有访问状态包的权限,因此我不知道如何才能做到这一点


在选项卡之间来回切换时,保持选项卡状态的最佳方法是什么?

在片段之间切换时,不要分离片段,而是隐藏。例如:

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

}

本例中的fm是什么?FragmentManager fm=getFragmentManager();我的if(fm.findFragmentByTag(tab.getTag().toString())==null)上有一个NullPointerException。有什么想法吗?当你添加新标签时,为它设置标签。mActionBar.addTab(mActionBar.newTab().setText(“选项卡标题在此处”).setTabListener(this.setTag(“选项卡标签在此处”),true);我猜在ft.addToBackStack(…)之后还需要ft.commit()。至少对我来说这是必要的。