0

我正在尝试在我的应用程序中实现片段结果 API。我需要在 Fragment 中显示 DialogFragment,并在单击对话框按钮时将结果从对话框片段发送到片段。所以在我的对话框片段中,当我点击按钮时,我做了这样的事情:

  setFragmentResult(requestKey, bundleOf(RESULT to result))

我正在尝试在我的片段中检索结果onCreate()

  childFragmentManager.setFragmentResultListener(requestKey, this) { _, bundle ->
        val result = bundle.getInt(DialogFragment.RESULT)
       // some code
    }

一切正常,但有一个问题。我在对话片段中requestKey调用时使用的是动态的。setFragmentResult

即在不同情况下可以在fragment内部打开对话框。我需要区分这些情况。为此,我向对话片段发送了一个不同的请求密钥。但是我如何在片段中接收结果时,按键区分这个结果。如果我在onCreate()方法内部这样做。

也就是说,我想做这样的事情:

 childFragmentManager.setFragmentResultListener(requestKey, this) { requestKey, bundle ->
            when(requestKey) {
                "FIRST_CASE" -> { // some code }
                "SECOND_CASE" -> { // some code }  
          }
        }

但是我不明白如果这个方法 ( setFragmentResultListener) 已经需要 arequestKey作为参数,如何实现它。我应该从哪里拿走它?

如果我requestKey是静态的,我会在对话框片段中创建一个常量并使用它。但我requestKey是动态的。

请帮我。我没有在 Internet 上找到适合我的示例。目前我不明白如何在使用 MVVM 的干净架构的上下文中实现这一点。

PS 这里是我想要实现的一个例子:一个包含两个按钮(例如AB)的片段。通过单击每个按钮,将打开带有不同文本的对话框片段。在对话框内还有一个按钮,通过单击该按钮将结果传输到片段。我需要以不同的方式处理此结果,具体取决于在片段(A 或 B)上按下了哪个按钮。为此,我想通过请求键进行区分。

4

1 回答 1

1

FragmentResultListener收到 a的原因requestKey是如果您FragmentResultListener多次调用中重复使用相同的setFragmentResultListener- 即,如果您的 Fragment 本身实现了FragmentResultListener.

在你的情况下,你的 Fragment 没有实现FragmentResultListener,所以你可以调用setFragmentResultListener两次,每个键一次:

childFragmentManager.setFragmentResultListener("FIRST_CASE", this) { _, bundle ->
  // some code
}
childFragmentManager.setFragmentResultListener("SECOND_CASE", this) { _, bundle ->
  // some code
}
于 2022-02-27T21:05:30.487 回答