getSupportFragmentManager VS getChildFragmentManager

时间:2018-07-18 07:06:17

标签: java android android-fragments android-intent android-activity

我想在活动中创建片段。 我在1个活动中有4个片段 我有这样的代码

Compatibility Level

我已经成功展示了片段 但是当我打开其他片段时 1.打开fragment_invoice 2.移至fragment_achievement 3.我返回fragment_invoice,然后所有数据都将丢失,但fragment_sales_order不会。 4.碰巧我打开fragment_sales_order 5.移至fragment_approval,然后fragment_sales_order中的所有数据都将丢失。

为什么片段中的数据丢失了奇数偶数片段?

我正在对此进行研究,也许可以给我一些使用getchildfragmentmanager的想法。 getChildFragmentManager () cannot be resolved or cannot be referenced

对于方法getchildfragmentmanager必须扩展到FragmentManager 但是我的Java类必须扩展AppCompatActivity。无法扩展到FragmentManager,因为我从http上获取的一些数据扩展到了活动意图

当我移至其他片段时,有人可以帮助我修复片段以便始终显示数据吗? 抱歉,如果我的问题和语法很奇怪 감사합니다여러번

1 个答案:

答案 0 :(得分:0)

getChildFragmentManager()的定义是:

返回私有的FragmentManager,用于在Fragment内放置和管理Fragment。

同时getFragmentManager()的定义是:

返回FragmentManager以便与与片段活动相关联的片段进行交互。

基本上,区别在于Fragment现在具有自己的内部FragmentManager,可以处理Fragment。子FragmentManager是仅处理添加到其中的Fragment中包含的Fragment的子程序。另一个FragmentManager包含在整个Activity中。

要在MainActivity上显示Fragment1,必须使用getSupportFragmentManager()

getSupportFragmentManager().beginTransaction().replace(R.id.container_view_on_main, Fragment1.newInstance());

要显示Fragment1中的Fragment2,我们有2种方法

使用getFragmentManager()

getFragmentManager().beginTransaction().replace(R.id.container_view_on_main, Fragment1.newInstance());

使用getChildFragmentManager()

首先,我们必须在fragment1.xml中创建一个ID为container_view_on_fragment1的布局,然后

getChildFragmentManager().beginTransaction().replace(R.id.container_view_on_fragment1, Fragment2.newInstance()).commit();