blog.bouzuya.net

2019-10-03 Android の NavController.navigate で IllegalArgumentException

Twitter にも書いたのだけど Android の Navigation の例外に困っている。

ある 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());
  }
}