我应该替换片段还是修改当前片段?

时间:2019-03-19 09:52:53

标签: android performance android-fragments

  • 可以在代码中动态添加/替换/删除片段。我一直在为项目使用这种方法。

  • 但是我不知道如果不创建一个新片段并添加或替换当前片段,而只是抓住当前片段的句柄并对其进行修改,会有什么区别(主要是性能)?

  • 例如,考虑一个简单的场景,其中片段的唯一目的是显示图像,而我们要修改该图像:

选项1)创建一个我的Fragment类的新实例,并替换当前显示的片段:

MyFragmentClass fr = new MyFragmentClass();
fr.setImage(1);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.frame_layout_id, f)
...

选项2)只需获取对当前显示的片段的引用并进行修改:

MyFragmentClass fr = (MyFragmentClass)
                fragmentManager.findFragmentById(R.id.frame_layout_id);
fr.setImage(1);

创建新片段实例并添加它的整个过程是否比调用findFragmentById更有效?

1 个答案:

答案 0 :(得分:0)

请仔细阅读以下信息

1-fragmentTransaction.addToBackStack(str); 将此事务添加到后台堆栈。这意味着该事务在提交后将被记住,并且在以后从堆栈中弹出时将撤消其操作。

2-fragmentTransaction.replace(int containerViewId,Fragment片段,字符串标记) 它替换了添加到容器中的现有片段。

这与为所有当前添加的片段调用remove(Fragment)相同,这些片段使用相同的containerViewId添加,然后使用此处给出的相同参数添加(int,Fragment,String)。

3-fragmentTransaction.add(int containerViewId,Fragment片段,字符串标记) 将片段添加到活动状态。该片段还可以选择将其视图(如果Fragment.onCreateView返回非空)进入活动的容器视图。

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

这里有一个堆栈,所有处于运行状态的活动都保留在其中。片段属于活动。因此,您可以添加它们以将其嵌入活动中。

导航到当前布局时,您具有该容器的ID,可将其替换为所需的片段。

您还可以使用popBackStack()方法返回backStack中的上一个片段。为此,您需要使用addToBackStack()在堆栈中添加该片段,然后使用commit()进行反映。这是相反的顺序,当前在最上面。

findFragmentByTag does this search for tag added by the add/replace method or the addToBackStack method ?

是否取决于您如何添加标签。然后,它只是根据您定义的标签找到一个片段,该片段在从XML扩展时或在事务中添加时提供时就定义了。