如何保存活动片段的交易状态?

时间:2014-05-28 08:36:47

标签: android android-fragments

相关Question

我整理了一个简单的应用程序,如下所示: Activity -> FirstFragment

活动:onCreate() - > createFirstFragment()

    FirstFragment firstFragment = (FirstFragment) getSupportFragmentManager().findFragmentByTag(FirstFragment.TAG);
    if (firstFragment == null)
    {
        firstFragment = FirstFragment.newInstance();
        getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.firstFragmentContainer, firstFragment, FirstFragment.TAG)
            .hide(firstFragment)
            //.addToBackStack(null)
            .commit();
    }

简单明了,在onCreate()期间添加和隐藏片段,以便我以后可以显示/隐藏动画。

现在,我的问题是:为什么Activity / FragmentManager不记得此事务(无论我在片段上是.addToBackStack()还是setRetainInstance(true))活动被杀死并重新创建?您可以通过选中Do not keep activities开发人员选项进行测试。启动应用程序,firstFragment按预期隐藏,最小化并返回,以及中提琴! firstFragment让全世界都能看到!

我希望Android会管理这类事情,还是我需要专门记录我的所有交易并在重新创建应用时重复这些事务?

非常感谢任何帮助/建议!

修改:另请参阅相关的已记录bug

1 个答案:

答案 0 :(得分:0)

在主要活动中使用如下所示的FragmentStatePagerAdapter。这内部调用片段的'onSaveInstanceState',从而跟踪您所做的更改并保留事务状态

class MyAdapter extends FragmentStatePagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // your code here
    }

    @Override
    public int getCount() { 
           // returns no. of fragments count. in my case it is 4
        return 4;
    }
主要活动中的

onCreate()通常如下所示:

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView (R.layout.scrollabletabs_main);
        viewPager = (ViewPager) findViewById (R.id.pager);
        FragmentManager fragManager = getSupportFragmentManager();
        viewPager.setAdapter(new MyAdapter(fragManager));
    }

http://developer.android.com/training/basics/fragments/fragment-ui.html提到了,

注意:删除或替换片段并将事务添加到后台堆栈时,将删除(不销毁)已删除的片段。如果用户导航回还原片段,则会重新启动。如果您不将事务添加到后台堆栈,则在删除或替换时会破坏该片段。