首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能在onDestroy()中分离一个片段吗?

你能在onDestroy()中分离一个片段吗?
EN

Stack Overflow用户
提问于 2012-11-30 12:51:31
回答 2查看 1.5K关注 0票数 1

这就是我遇到的问题。我有一个包含片段F的活动A,它包含在视图V中的FragmentPagerAdapter FPA中(A->V->FPA->F)

当A被销毁(或者在本例中,被换出)时,F被附加,并且在FPA中,而FPA在V中。然而,当A被重新创建时(例如,有人点击返回按钮回到活动中),V和FPA不存在,所以F被重新创建(在附加状态中!),但是到了不存在的东西,所以它根本不在视图层次结构中。然后,当FPA尝试在这个片段上执行instantiateState操作时,它会尝试附着它,但这不会做任何事情,因为它已经附着在稀薄的空气上。

显然有几种方法可以解决这个问题(例如,让V和FPA存在于活动的onCreate中,这样片段在创建时就有了去处),但我想继续懒惰地只在需要时创建FPA和V。

因此,在onDestroy()中将F的状态更新为detached似乎是可取的。但是,状态保存在onPause()中,这意味着我在这里有点不走运。

有没有办法更新A的onDestroy()中保存的F的状态?有没有一种方法可以说“如果活动被破坏了,不要对这个片段进行再水合”?有没有其他一些我没有考虑到的明显的思考方式呢?我觉得我好像走错了路。

EN

回答 2

Stack Overflow用户

发布于 2012-11-30 17:25:22

我和FragmentPagers之间有点麻烦。我所做的是在Activity onCreate()中传递一个空包,然后在每次创建时从头开始创建所有内容。如下所示:

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    // do my stuff
}

这样,当重新创建活动时,片段将不会被传递。

票数 1
EN

Stack Overflow用户

发布于 2012-11-30 17:59:11

你写道:

有没有其他一些我没有考虑到的明显的思考方式呢?

这并没有直接回答您的标题问题,但为如何在ViewPager中保留Fragment状态提供了一个方便的解决方案。

通过在初始化FragmentActivity中标记Fragment,可以在销毁Activity时保存Fragment状态

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.photos_pager_activity);

    MyImageFragment fragment;
    if (savedInstanceState != null) {
        fragment = (MyImageFragment) getFragmentManager().findFragmentByTag("my_image_fragment_tag");
    } else {
        fragment = new MyImageFragment();
        getFragmentManager().beginTransaction().add(android.R.id.content, fragment, "my_image_fragment_tag").commit(); 
    }

另请参阅:

Uses of fragment tags

ViewPager and fragments — what's the right way to store fragment's state?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13639214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档