2019-10-03 Android の NavController.navigate で IllegalArgumentException
Twitter にも書いたのだけど Android の Navigation の例外に困っている。
`java.lang.IllegalArgumentException: navigation destination XXX is unknown to this NavController`
— bouzuya (@bouzuya) October 1, 2019
ある Fragment A で findNavController().navigate(actionAToB())
する。そのとき既に Fragment A を離れてしまっていると IllegalArgumentException
が投げられる。通信処理の結果を受けて画面遷移するなどで意外と発生する。このへんどうやって対処しているのだろう。そも Navigation なんてものは使わないのか。
うまい方法が思いつかないので↓を簡単に実行できるようにしてごまかしている。
findNavController().let { navController ->
// Fragment A に居ることを確認してから遷移する。
// 何も実行しなくても既に Fragment A から離れているわけで実害はない。
if (navController.currentDirection?.id == R.id.a) {
navController.navigate(actionAToB());
}
}