我在项目中遇到setFragmentResultListener回调问题。你可以想象有一个活动,它的片段是A。在片段A中,我设置了一个FragmentResultListener,如下所示
setFragmentResultListener(AddImageDialogFragment::class.java.simpleName, this) { _, bundle -> }
以及一个按钮,单击该按钮将打开AddImageDialogFragment。这是打开对话框的代码
AddImageDialogFragment.newInstance().show(parentFragmentManager, null)
在对话框中,我使用以下代码将result设置为FragmentA
setFragmentResult(this::class.java.simpleName, bundleOf())
- 问题是你可以看到下面的2个案例 *
- 案例1(运行良好)**
1.将片段B添加到已包含片段A的Activity
1.弹出回栈到片段A
1.从片段A中添加打开的AddImageDialogFragment并调用setFragmentResult-> FragmentResultListener仍然可以正常工作
- 情况2(不工作)**
1.将片段B添加到已包含片段A的Activity
1.将片段C添加到已包含片段A和B的Activity
1.弹出回栈到片段C-> B-> A
1.从片段A添加open AddImageDialogFragment,调用setFragmentResult->FragmentResultListener未被调用
有人知道我的代码发生了什么吗?我真的很感谢你的帮助!
1条答案
按热度按时间insrf1ej1#
最近我意识到问题是fragmentManager与每个片段上下文不匹配,这导致了我的代码中的一些混乱。对于在fragment内启动fragment,它将是childFragmentManager而不是parentFragmentManager