我的目标是在片段堆栈中只允许同一对话框片段的一个实例。
当前触发条件来自 SharedFlow 并且可以7ms
在值之间多次触发。
这是我尝试过的:
- 将代码放在一个
synchronized
块中 - 通过调用检查现有片段是否在堆栈中
fm.findFragmentByTag
但是,这两个条件都不足以防止fragment多次添加到fragmentManager。
我试过了,dialogFragment.showNow(fm, tag)
但它不稳定而且崩溃了
感谢任何帮助。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewModel.someSharedFlow
.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.onEach { showMyFragmentDialog() }
.launchIn(viewLifecycleOwner.lifecycleScope)
}
private fun showMyFragmentDialog() {
synchronized(childFragmentManager) {
if (childFragmentManager.findFragmentByTag(MyFragment.TAG) == null) {
MyFragment.newInstance(fuelTypes)
.show(childFragmentManager, MyFragment.TAG)
}
}
}