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

时间:2015-03-20 05:03:46

标签: android android-layout android-fragments android-activity android-nested-fragment

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

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

在我创建的其他应用程序中,只有一到两个级别的动态片段,我通过在片段中创建接口然后在我的活动中实现该接口来管理。

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

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

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

我补充说 this.setRetainInstance(真);尽管我的所有碎片。

我使用当前的一个调用新片段:

AllocationFragment.NewInstance(CurrActivityContext,urlToCatch2);
这里,CurrActivityContext = MainActivity.this

然后在newInstance()中: enter image description here

  1. 如何在方向更改中显示frameLayout中的最后一个片段(片段4)?
  2. 此处,主要活动 - >片段1 - >片段2 - >片段3 - >片段4
    如何将数据从片段4传递到片段3?
  3. 混乱

    1. 在动态创建的片段中添加多个级别(如我的情况下为4个)或者在每个片段之后我应该将数据传递回主要活动,这将充当控制器并传输数据到下一个片段。

    2. 一般来说,嵌套片段的级别应该是可管理的。

2 个答案:

答案 0 :(得分:0)

  

1-如何在frameLayout中显示最后一个片段(片段4)   方向改变?

您可以使用您的活动来保存当前片段的索引。

  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-这里,主要活动 - >片段1 - >片段2 - >片段3 - >   片段4如何将数据从片段4传递到片段3?

您似乎通过将值传递给活动来正确处理它,但还有另一种方法我不建议使用Fragment.setTargetFragment并使用Fragment.getTargetFragment检索目标片段并通过使用片段引用的数据。

  

3-添加多个级别(在我的情况下为4)是个好主意   动态创建的片段或我应该传递的每个片段之后   数据回到主要活动,它将充当控制器和   将数据传输到下一个片段。

我认为这是最好的方法。

  

4-一般来说,嵌套片段的级别应该是可管理的。

我认为没有限制。

答案 1 :(得分:0)

MoshErsan,感谢您的回复,但关于第1点,我没有从主要活动创建片段4。流程就像主要活动创建片段1,它取代了framelayout然后从片段1片段2在飞行中创建,然后再次替换framelayout然后从片段2片段3在飞行中创建,它再次替换framelayout,最后片段4动态创建来自片段3,它最终在再次替换相同的framelayout后显示数据。那么主Activity如何获取由它创建的片段索引而不是由某个片段创建。 所有这些片段都替换了相同的framelayout。

请告诉我是否需要更多我的代码才能让事情更清楚......