【问题标题】:Android Multiple Dynamically Created Nested Fragments. Confusion and IssueAndroid 多个动态创建的嵌套片段。困惑和问题
【发布时间】:2015-05-23 11:06:34
【问题描述】:

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

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

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

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

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

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

我添加了 this.setRetainInstance(true);不过对于我所有的碎片。

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

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

然后在 newInstance() 中:

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

混乱

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

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

【问题讨论】:

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


    【解决方案1】:

    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 -> Fragment 4 如何将数据从 Fragment 4 传递到 Fragment 3 ?

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

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

    我认为这是最好的方法。

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

    我认为这没有限制。

    【讨论】:

    • 终于做对了.. 正如你所说,我使用活动作为控制器做得对,但是将数据直接从片段 4 传递到片段 3 并不是一个好主意,因为它可能会导致严重的应用程序崩溃(在我的情况下),但是一旦我使用活动传递数据......一切正常......甚至我的设备旋转处理代码,这在早些时候杀死了我......非常感谢
    【解决方案2】:

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

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

    【讨论】:

    • 正如您所说,您通过在片段之间传递值来使用活动作为控制器,然后您可以使用活动来创建片段!
    • 是的,这是正确的,我使用活动作为控制器,如果嵌套级别为 2,但在这里我嵌套到第 4 级,这里我的第 3 个片段正在创建我的第 4 个片段并且活动不知道那。然后如何将数据从第 4 个片段传回给第 3 个片段。
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多