我应该更换片段或修改当前一个吗?


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

  • 但是,我想知道如果不是创建新片段并添加或替换当前的片段,我们只会抓取当前的句柄并修改它。

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

选项1)创建我的片段类的新实例,然后替换当前显示的片段:

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- fragmentTransaction.addtobackstack(str); 将此交易添加到后堆栈中。这意味着交易在提交后会记住,并在稍后从堆栈中弹出时会逆转其操作。

2- fragmentTransaction.replace(int containerviewId,fragment fragment,string tag)它取代了添加到容器中的现有片段。

这与呼叫删除(fragment)的所有当前添加的片段相同,这些片段添加了相同的containerviewID,然后在此处给出的相同参数添加(int,fragment,string)。

3- fragmentTransaction.add(int containerviewId,fragment fragment,string tag)>在活动状态中添加片段。该片段也可以选择也可以将其视图(如果fragment.Oncreateview返回nonnull)中的活动视图。

替换已经存在的片段并在活动状态添加片段并在后堆栈中添加一个片段是什么意思?

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

导航到当前布局时,您将拥有该容器的ID,可以用所需的片段替换它。

您也可以使用PopBackStack()方法回到背面中的先前片段。为此,您需要使用AddToBackStack()中添加该片段,然后将其commit()反映。这是相反的顺序,顶部的电流。

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

如果取决于您如何添加标签。然后,它只是通过标签找到一个片段,您在从XML上夸大或在交易中添加时提供的片段。

最新更新