对于我当前的应用程序,我使用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()中:
在动态创建的片段中添加多个级别(如我的情况下为4个)或者在每个片段之后我应该将数据传递回主要活动,这将充当控制器并传输数据到下一个片段。
一般来说,嵌套片段的级别应该是可管理的。
答案 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。
请告诉我是否需要更多我的代码才能让事情更清楚......