如何保存标签的状态?

时间:2014-07-07 20:37:43

标签: java android

在我的应用中,您可以在每个标签中使用该界面。但是当你更改标签时,则返回它不会保存。我该如何实现呢?

主要活动

 ActionBar.Tab tab1, tab2;
Fragment fragmentTab1 = new FragmentTab1();
Fragment fragmentTab2 = new FragmentTab2();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_screen);

    ActionBar actionBar = getActionBar();
    assert actionBar != null;
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    final ActionBar bar = getActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);


    tab1 = actionBar.newTab().setText("Skate Dice");
    tab2 = actionBar.newTab().setText("S.K.A.T.E");

    tab1.setTabListener(new MyTabListener(fragmentTab1));
    tab2.setTabListener(new MyTabListener(fragmentTab2));

    actionBar.addTab(tab1);
    actionBar.addTab(tab2);

标签监听器

public class MyTabListener implements ActionBar.TabListener
{
Fragment fragment;

public MyTabListener(Fragment fragment)
{
    this.fragment = fragment;
}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
    ft.replace(R.id.fragment_container, fragment);
}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
{
    ft.remove(fragment);
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
{
    // nothing done here
}

}

当用户取消选择然后返回选项卡时,如何保存选项卡的状态? 我是Android开发的新手任何建议/帮助将非常感谢谢谢!

2 个答案:

答案 0 :(得分:0)

查看this answer并查看this project

这些将有希望让你朝着正确的方向前进。另一个有用的项目是管理fragment life cycle。这可以使您能够在片段暂停或销毁之前对数据执行某些操作(例如保存)。

编辑: http://developer.android.com/reference/android/app/ActionBar.TabListener.html提供了一些很好的信息。不要完全删除片段,而是使用attach()和detach()方法。类似的东西:

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if (fragment == null) {
            ft.replace(R.id.fragment_container, fragment); // or use ft.add()
        } else {
            ft.attach(fragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

我还没有能够测试它但它应该沿着这些方向...... 很抱歉有另一个链接,但this is helpful too.

答案 1 :(得分:0)

最简单的答案 - 每个标签都需要有自己的TabListener,因此每个标签的片段都保存在TabListener实现中。