最近使用Jetpack的Navigation庫時, 碰到了這個報錯. 說是當(dāng)前跳轉(zhuǎn)的destination不對. 查了一段時間后才發(fā)現(xiàn)一種比較容易出現(xiàn)這個bug的情況.
那就是, 如果從跳轉(zhuǎn)的目的地是<dialog
這個標(biāo)簽的話.也就是類似下圖這樣
image.png
他在跳轉(zhuǎn)的時候,會調(diào)用
fragmentManager
來添加一個DialogFragment
, 問題就處在這里.
因為dialog從創(chuàng)建到顯示, 有一個動畫時間, 在這段時間之內(nèi), 雖然目標(biāo)dialogFragment
還沒顯示在屏幕上, 但是Navigation已經(jīng)把這個目標(biāo)destination添加到了任務(wù)棧當(dāng)中了, 也把當(dāng)前navController
的當(dāng)前destination
設(shè)置為了這個DialogFragment
. 如果在這個時候再點擊一次剛才的彈出dialog的按鈕. 會再次嘗試打開dialog,但是當(dāng)前的destination
已經(jīng)是DialogFragment
了. 而不是點按鈕的那個Fragment
. 所以會造成action
不匹配, 引發(fā)錯誤.
解決的辦法就是在DialogFragment顯示出來之前, 不可以再次調(diào)用這個navigate
跳轉(zhuǎn)方法