Android 多个动态创建的嵌套片段。困惑和问题

Android Multiple Dynamically Created Nested Fragments. Confusion and Issue

对于我当前的应用程序,我使用带有片段支持库的 minSdkVersion 14 来创建片段。

问题(多个动态创建的嵌套片段):

在我创建的其他应用程序中,我通过在片段中创建界面然后在我的 activity.

中实现该界面来管理一两个级别的动态片段

但对于我当前的应用程序,我需要实现 3 或 4 级动态创建的片段

MainActivity 有一个 frameLayout,
then from main Activity Fragment 1 被调用并添加到 frameLayout
then from Fragment 1片段 2 被调用并再次替换相同 frameLayout 的内容...等等,直到最后片段 4 替换相同 frameLayout 的内容。
在从 Fragment 1 到 Fragment 4 的每个页面(片段布局)上,用户必须 select 某些内容才能转到下一页。

它在第一个 运行 上工作正常,一切正常,但在更改设备的方向时,只有第一个片段(片段 1)添加了 frameLayout,而不是最后一个(片段 4),它最后填充 frameLayout .

我已添加 this.setRetainInstance(真);不过我所有的片段。

我正在使用当前片段调用新片段:

AllocationFragment.NewInstance(当前Activity上下文,urlToCatch2);
这里,CurrActivity上下文=MainActivity.this

然后在 newInstance() 中:

  1. 如何在方向更改时显示 frameLayout 中的最后一个片段(片段 4)?
  2. 在这里,主要 Activity -> 片段 1 -> 片段 2 -> 片段 3 -> 片段 4
    如何将数据从片段 4 传递到片段 3?

混乱

  1. 添加多级(在我的例子中是 4 级)动态创建的片段是个好主意,还是在每个片段之后我应该将数据传回主 activity,这将充当控制器并将数据传输到下一个片段。

  2. 一般来说嵌套多少层fragment应该是可以管理的。

1- How to show the last fragment (Fragment 4) in frameLayout on orientation change ?

你可以使用你的activity来保存当前片段的索引。

  int currentFragmentIndex;

  @Override protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("current_fragment_index", currentFragmentIndex);
  }

  @Override protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    currentFragmentIndex = savedInstanceState.getInt("current_fragment_index", 0);
    //replace content layout with your fragment 
  }

2- Here, Main Activity -> Fragment 1 -> Fragment 2 -> Fragment 3 -> Fragment 4 How to Pass data from Fragment 4 to Fragment 3 ?

你似乎通过将值传递给 activity 来正确处理它,但我不推荐的另一种方法是使用 Fragment.setTargetFragment and retrieve the target fragment by using Fragment.getTargetFragment 并使用片段引用传递数据。

3- Is it good idea to add multiple level (like 4 in my case) of dynamically created fragments or after every fragment I should pass the data back to the main activity, which will act as a controller and transfer the data to next fragment.

我认为这是最好的方法。

4- In general, how many level of nested fragment should be manageable.

我认为没有限制。

MoshErsan,感谢您的回复,但关于第 1 点,我不是从主 activity 创建片段 4。流程就像 main activity 创建片段 1 替换 framelayout 然后从片段 1 动态创建片段 2 然后再次替换 framelayout 然后从片段 2 动态创建片段 3 再次替换 framelayout 最后片段4 是从片段 3 动态创建的,片段 3 在再次替换相同的框架布局后最终显示数据。那么 main Activity 将如何获取不是由它创建的片段的索引,而是由某个片段创建的。 此外,所有这些片段都在替换相同的框架布局。

请告知是否需要我的更多代码以使事情更清楚...