Android和Fragment结果API.如何使用不同的请求密钥共享子片段的结果



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

setFragmentResult(requestKey, bundleOf(RESULT to result))

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

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

一切都很好,但有一个问题。在对话框片段中调用setFragmentResult时使用的requestKey是动态的。

也就是说,在不同的情况下,可以在片段内部打开对话框。我需要区分这些情况。为此,我向对话框片段发送了一个不同的请求键。但是,当我在片段中接收到结果时,如何通过关键字来区分这个结果。如果我在onCreate()方法中执行此操作。

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

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

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

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

请帮帮我。我在网上找不到合适的例子。目前,我不明白如何在MVVM的干净架构中实现这一点。

附言:以下是我想要实现的一个示例:包含两个按钮(例如AB(的片段。单击每个按钮,对话框片段就会打开,其中包含不同的文本。对话框中还有一个按钮,通过单击该按钮,结果将转移到片段中。我需要以不同的方式处理这个结果,这取决于在片段(A或B(上按下了哪个按钮。为了做到这一点,我想通过请求键来区分。

FragmentResultListener收到requestKey的原因是,如果您在对setFragmentResultListener多个调用中重用相同的FragmentResultListener,即,如果您的Fragment本身实现了FragmentResultListener

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

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

最新更新