首页 > 解决方案 > 当从 Fragment B 到 A 的 popbackstack 时保存 Fragment View(如完成活动)

问题描述

我有两个片段FRAGMENT AFRAGMENT B。当我从片段A转到片段B时,我在 backstack 中添加片段Aaddtobackstack(null)使用和使用replace()方法。问题是当我popbackstack()FRAGMENT B --> FRAGMENT A调用然后OnCreateView()再次onViewCreated()调用它时,它再次在FRAGMENT A中加载回收器视图。我知道所有实例都没有再次加载,但问题是我不想再次加载视图。前任。当我打电话给完成以前的活动时,活动中的活动与我们离开时一样。

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

谢谢

标签: androidfragment

解决方案


以供参考:

add 和 replace 之间的另一个重要区别是:replace 删除现有片段并添加新片段。这意味着当您按下返回按钮时,将创建被替换的片段并调用其 onCreateView。而 add 保留现有片段并添加一个新片段,这意味着现有片段将处于活动状态并且它们不会处于“暂停”状态,因此当按下后退按钮时不会为现有片段调用 onCreateView(在新片段之前存在的片段添加了片段)。对于fragment的生命周期事件onPause、onResume、onCreateView等生命周期事件,replace时会调用,add时不会调用。

简而言之,对于您的用例,您需要使用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">

推荐阅读