我不知道该如何管理这个问题
currentDestination
来自Android navController,尤其是在使用
<dialog>
.以下是我的设想:
在我的第一个片段中,我导航到一个
DialogFragment
这是一个按钮。单击该按钮时,我会更新第一个片段正在观察和调用的一些实时数据
dismiss()
.但当控件返回到第一个片段时
当前目的地
在navController中仍然设置为对话框片段!
为什么不设置为第一个片段?我还尝试使用导航从对话框移动到第一个片段,但得到了完全相同的结果。
以下是代码:
class AgendaFragment : Fragment() {
private val mainViewModel: MainViewModel by activityViewModels()
private lateinit var binding: FragmentAgendaBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentAgendaBinding.inflate(inflater, container, false)
binding.someButton.setOnClickListener {
findNavController.navigate(AgendaFragmentDirections.toDialog())
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
mainViewModel.someLiveData.observe(viewLifecycleOwner) {
Timber.d(findNavController().currentDestination)
}
}
}
class MyDialog : DialogFragment() {
private val mainViewModel: MainViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
super.onCreateView(inflater, container, savedInstanceState)
binding = DialogMyBinding.inflate(inflater, container, false)
binding.button.setOnClickListener{
dismiss()
mainViewModel.someLiveData.postValue(true)
}
}
导航图。xml
<fragment
android:id"@+id/agendaFragment
android:name="com.example.AgendaFragment">
<action
android:id="@+id/toDialog"
app:destination="@id/MyDialog"
app:popUpTo="@id/agendaFragment"
app:popUpToInclusive="true"/>
</fragment>
一切按正确的顺序进行。日志输出如下所示:
目的地(com.example:id/MyDialog)
但这是从AgendaFragment触发的,那么为什么当前目标仍然设置为对话框而不是AgendaFragment?