最近使用Jetpack的Navigation库时, 碰到了这个报错. 说是当前跳转的destination不对. 查了一段时间后才发现一种比较容易出现这个bug的情况.
那就是, 如果从跳转的目的地是<dialog
这个标签的话.也就是类似下图这样
他在跳转的时候,会调用
fragmentManager
来添加一个DialogFragment
, 问题就处在这里.
因为dialog从创建到显示, 有一个动画时间, 在这段时间之内, 虽然目标dialogFragment
还没显示在屏幕上, 但是Navigation已经把这个目标destination添加到了任务栈当中了, 也把当前navController
的当前destination
设置为了这个DialogFragment
. 如果在这个时候再点击一次刚才的弹出dialog的按钮. 会再次尝试打开dialog,但是当前的destination
已经是DialogFragment
了. 而不是点按钮的那个Fragment
. 所以会造成action
不匹配, 引发错误.
解决的办法就是在DialogFragment显示出来之前, 不可以再次调用这个navigate
跳转方法