当从片段B到A popbackStack到A时,保存片段视图(类似于活动中的片段)



我有两个片段片段a fragment b 。当i从片段转到 fragment b 我使用addtobackstack(null)在背包中添加 fragment a ,也使用replace()方法。问题是当我从片段调用 popbackstack()时,fragment b -> fragment a 然后再次调用 OnCreateView() and onViewCreated(),然后再次加载回收器视图中的 fragment a 我知道所有实例都没有再次加载但是问题是我不想再次加载视图。前任。在我打电话完成的活动中,先前的活动与我们离开时相同。

NOTE :我不想在beginTransaction中使用add()方法,因为它重叠了其他片段。

谢谢

参考:

添加和替换之间的另一个重要差异是:替换 去除现有片段并添加新片段。这意味着什么时候 您按向后按钮将创建被替换的片段 它被调用。而添加保留了现有的 片段并添加一个新片段,这意味着现有片段将是 活跃,它们不会处于"暂停"状态,因此当返回按钮时 按下的otCreateview并未为现有片段调用( 在添加新片段之前就在那里的碎片)。 碎片的生命周期事件Onpause,resume,onCreateview和其他 生命周期事件将在替换的情况下被调用,但它们不会 在添加的情况下调用。

简而言之,对于用例,您需要使用add,如果您不希望片段视图重叠,则可以用固体颜色而不是透明替换Fragment B查看背景颜色。

也不要忘记将android:clickable="true"添加到第二片片段的父视图中,因此它可以捕获点击,并且不会传播到下面的片段。这样的东西:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:focusable="true">

f您将片段添加到android.support.v4.app.fragmentManager您还必须在同一FragmentManager上调用PopBackStack()。

此代码应解决问题:

if (getSupportFragmentManager().getBackStackEntryCount() > 0){
    boolean done = getSupportFragmentManager().popBackStackImmediate();
}

最新更新