调用这些方法的主要区别是什么:

fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);

替换已经存在的片段,将片段添加到活动状态,并将活动添加到后堆栈,这意味着什么?

其次,对于findFragmentByTag(),搜索是add()/replace()方法还是addToBackStack()方法添加的标签?

推荐答案

1) fragmentTransaction.addToBackStack(str);

Description-将此事务添加到后台堆栈.这意味着事务将在提交后被记住,并在稍后从堆栈中弹出时反转其操作.

2) fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

Description-替换添加到容器中的现有片段.这本质上与对所有当前添加的片段调用remove(Fragment)相同,这些片段是使用相同的containerWebID添加的,然后使用此处给出的相同参数添加(int、Fragment、String).

3) fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

Description-向活动状态添加一个片段.该片段还可以 Select 将其视图(如果fragment.onCreateView返回非null)放入活动的容器视图中.

替换已经存在的片段并添加

有一个堆栈,其中保存了所有处于运行状态的活动.片段属于该活动.因此,您可以添加它们以将其嵌入到活动中.

您可以在单个活动中组合多个片段,以构建多窗格UI,并在多个活动中重用一个片段.当您在不同的布局上定义了片段容器时,这实际上很有用.您只需替换为任何布局中的任何其他片段.

当您导航到当前布局时,您拥有该容器的id,可以将其替换为所需的片段.

您还可以使用popBackStack()方法返回到后栈中的前一个片段.为此,您需要使用addToBackStack(),然后使用commit()将该片段添加到堆栈中以进行反映.这与电流在顶部的顺序相反.

findFragmentByTag搜索添加/替换添加的标记

取决于你如何添加标签.然后,它只会通过您之前定义的标记查找片段,这些标记可以是从XML中inflating 出来的,也可以是添加到事务中时提供的.

参考文献:FragmentTransaction

Android相关问答推荐

是否可以识别Firebase身份验证流程期间使用同一用户/设备的服务器端?

以正确的方式从房间收集流量

Kotlin为多个控件设置一个侦听器

Android v31 及更低版本中 ImageView 中的圆角

Play store 的 Play 完整性与 Firebase 应用判断 Play 完整性

在 compose 中做可变状态堆栈

Kotlin 协程、 retrofit 、android

Material 3 中的 ModalBottomSheet 用于 compose

如何用jetpack compose实现垂直李克特量表

任务 ':app:checkReleaseDuplicateClasses' 执行失败

Android Studio电鳗:javaHome好像无效

每次在 Jetpack Compose 中调用导航

如何放置在柱子的角落(底端)

如何将文本组合放在行中,一个具有可变宽度的组合

为什么按钮没有拉伸到屏幕边缘?

Kotlin Compose forEach 中的负间距

在 Room 中创建一对多关系时,@Relation 类是什么意思?

设备文件资源管理器-ROOM 数据库中的数据库文件夹为空

EAS 构建失败,错误代码为 1,但 Expo Build 成功,我需要 EAS 构建来删除未使用的包,如 com.segment.analytics.android:analytics

如果我在网络请求中指定它们是否与判断网络功能相关