【问题标题】:How to correclty return a variable from a Fragment?如何从片段中正确返回变量?
【发布时间】:2020-01-16 11:00:58
【问题描述】:

情况:

  1. 在按钮按下的第一个片段我想打开第二个片段 部分
  2. 在第二个片段上,我可以在列表项上创建新部分(或使用已存在的部分) 点击打开第三个片段
  3. 在第三个片段上,我可以编写新服务(或使用已存在),然后按按钮 点击返回第一个片段
  4. 并显示部分(来自第二个片段)和服务(来自第三个片段 片段)

    • 我的想法是在第二个片段上使用fragment.setArguments(bundle) 并将其转移到第三个片段
    • 在带有interface A{public void sendData(data);} 的第三个片段上,我会将变量返回给片段一个

我应该如何正确地将变量从 AllServicesSectionFragmnet + AllServicecDescriptionFragment 返回到 CreateNewServiceFragment?

【问题讨论】:

  • 你是如何从 Fragment 3 回到 Fragment 1 的?

标签: java android android-layout android-fragments android-navigation


【解决方案1】:

给fragmentA打标签

fragmentTransaction.add(new FragmentA(),"frag_Tag")

并在第三个片段中添加

FragmentA fback=FragmentManager.findfragmentByTag("frag_Tag")

并写在backButton方法中

if(fback!=null) { fback.show; }

【讨论】:

  • 这包含 SecondFragment 而不是 FirstFragment FragmentA fback=FragmentManager.findfragmentByTag("frag_Tag")
  • 片段A、片段B的这个标签有不同的标签
【解决方案2】:

您可以将您的 Fragment 视为一个函数:它可以从另一个 Fragment 调用并且可以返回一个值(使用 setTargetFragment and onActivityResult)。

当你想要另一个 Fragment 给你一个值时,你用 setTargetFragment 调用它并等待 onActivityResult 被调用。当被调用的 Fragment 打开另一个 Fragment 以完成其任务时,它也应该等待 onActivityResult 并向调用者返回一个值。

所以,伪代码:

fn fragment1() {
    handleData(call fragment2(arg));
}

fn fragment2(arg: T) -> U {
    return handle(call fragment3(arg));
}

fn fragment3(arg: T) -> U {
    // handle some user input
    return value;
}

可以表示为一系列 setTargetFragment 和 onActivityResult 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多