【问题标题】:Should I replace fragment or modify current one?我应该替换片段还是修改当前片段?
【发布时间】:2019-03-19 09:52:52
【问题描述】:
  • 可以在代码中动态添加/替换/删除片段。我一直在我的项目中使用这种方法。

  • 但是,我想知道如果我们不创建新片段并添加或替换当前片段,而是抓住当前片段的句柄并对其进行修改,会有什么不同(主要是在性能方面)。

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

选项 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);

创建一个新的fragment实例并添加它的整个过程是否比调用findFragmentById更高效?

【问题讨论】:

    标签: android performance android-fragments


    【解决方案1】:

    通过以下信息可能会得到澄清

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

    2- fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag) 它替换了添加到容器中的现有片段。

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

    3- fragmentTransaction.add(int containerViewId, Fragment fragment, String tag) 将片段添加到活动状态。该片段还可以选择将其视图(如果 Fragment.onCreateView 返回非 null)放入 Activity 的容器视图中。

    替换一个已经存在的fragment,在activity状态中添加一个fragment,在back stack中添加一个activity是什么意思?

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

    当您导航到当前布局时,您可以使用该容器的 id 将其替换为您想要的片段。

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

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

    是否取决于您添加标签的方式。然后,它会根据您之前定义的标签找到一个片段,无论是从 XML 膨胀时还是在事务中添加时提供的标签。

    【讨论】:

    • 是的,我知道片段交易系统是如何工作的。我的问题并非如此。我想知道为什么或何时使用此过程,而不是仅仅查找当前片段(而不是替换它)并直接修改其视图。所以基本上和你想修改一个Activity的时候一样。您不会用新的活动替换该活动,而是获取对其视图的引用并修改它们。
    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多