1

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

当 A 被销毁(或者在这种情况下,被换出)时,F 被附加,并且在 FPA 中,它在 V 中。但是,当 A 被重新创建时(例如,有人将返回按钮返回到活动中),V并且 FPA 不存在,所以 F 被重新创建(处于附加状态!),但是对于不存在的东西,所以它根本不在视图层次结构中。然后,当 FPA 尝试在该片段上实例化State 时,它​​会尝试附加它,这什么也不做,因为它已经附加到稀薄的空气中。

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

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

有没有办法在 A 的 onDestroy() 中更新 F 的保存状态?有没有办法说“如果活动被破坏,不要再水化这个片段”?还有其他一些我没有考虑的明显的思考方式吗?感觉就像我在这里做错了事情。

4

2 回答 2

1

我遇到了麻烦FragmentPagers。我所做的是在 Activity 中传递一个空包,onCreate()然后在每次创建时从头开始创建所有内容。像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    // do my stuff
}

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

于 2012-11-30T09:25:21.757 回答
1

你写了:

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

这不会直接回答您的标题问题,而是为如何FragmentViewPager.

您可以通过在初始化 的中标记 来保存销毁Fragment时的状态:ActivityFragmentActivityFragment

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

也可以看看:

片段标签的使用

ViewPager 和 Fragment — 存储 Fragment 状态的正确方法是什么?

于 2012-11-30T09:59:11.170 回答