当将popbackstack从Fragment B放到A时,保存Fragment View(例如完成活动)

时间:2019-02-16 12:10:12

标签: android fragment

我有两个片段 FRAGMENT A FRAGMENT B 。当我从 FRAGMENT A 转到 FRAGMENT B 时,我正在同时使用addtobackstack(null)replace()在堆栈中添加 FRAGMENT A 方法。问题是,当我从 FRAGMENT B -> FRAGMENT A 呼叫popbackstack()之后,OnCreateView()onViewCreated()再次呼叫并加载时再次在 FRAGMENT A 中查看回收者视图。我知道所有实例都不会再次加载 但是问题是我不想再次加载视图。例如当我打完电话时,活动仍保持不变。

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

谢谢

2 个答案:

答案 0 :(得分:1)

For reference:

  

添加和替换之间的另一个重要区别是:替换   删除现有片段并添加一个新片段。这意味着   您按返回按钮将创建被替换的片段   其onCreateView被调用。而add保留了现有的   片段并添加一个新片段,这意味着现有片段将是   处于活动状态,因此不会处于“已暂停”状态   按下onCreateView不会调用现有的片段(   添加新片段之前的片段)。 在   片段的生命周期事件onPause,onResume,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">

答案 1 :(得分:0)

如果您要将Fragments添加到android.support.v4.app.FragmentManager,则还必须在同一FragmentManager上调用popBackStack()。

此代码应该可以解决问题:

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