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