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() 中:
- 如何在方向更改时显示 frameLayout 中的最后一个片段(片段 4)?
- 在这里,主要 Activity -> 片段 1 -> 片段 2 -> 片段 3 -> 片段 4
如何将数据从片段 4 传递到片段 3?
混乱
添加多级(在我的例子中是 4 级)动态创建的片段是个好主意,还是在每个片段之后我应该将数据传回主 activity,这将充当控制器并将数据传输到下一个片段。
一般来说嵌套多少层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 将如何获取不是由它创建的片段的索引,而是由某个片段创建的。
此外,所有这些片段都在替换相同的框架布局。
请告知是否需要我的更多代码以使事情更清楚...
对于我当前的应用程序,我使用带有片段支持库的 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() 中:
- 如何在方向更改时显示 frameLayout 中的最后一个片段(片段 4)?
- 在这里,主要 Activity -> 片段 1 -> 片段 2 -> 片段 3 -> 片段 4
如何将数据从片段 4 传递到片段 3?
混乱
添加多级(在我的例子中是 4 级)动态创建的片段是个好主意,还是在每个片段之后我应该将数据传回主 activity,这将充当控制器并将数据传输到下一个片段。
一般来说嵌套多少层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 将如何获取不是由它创建的片段的索引,而是由某个片段创建的。 此外,所有这些片段都在替换相同的框架布局。
请告知是否需要我的更多代码以使事情更清楚...