Koinライブラリーとともに、Androidアーキテクチャコンポーネント(ナビゲーションとセーフアーグ、モデルの表示))を使い始めました。
現在、2つのフラグメント間で引数を渡す際に問題があります。フラグメントAからフラグメントBに文字列値を渡し、フラグメントBでこの値を変更して、フラグメントAに返す必要があります。
私の問題に対する1つの可能な解決策-共有ビューモデルを見つけました。残念ながら、画面間で値を渡したり変更したりできるため、このアプローチには1つの問題がありますが、フラグメントAが別の宛先にナビゲートすると、共有ビューモデルの値は引き続き保存され、クリアされません。
Android Navigation?)のフラグメント間でデータを渡したり変更したりするための別の解決策はありますか(フラグメントAが破棄されたときに)この1つの値を手動でクリアしないようにします。
Androidはこのためのソリューションをリリースしました。 宛先間でのデータの受け渡し (Navigation 2.3.0-alpha02)、基本的に、フラグメントAで変数の変化を観察し、フラグメントBでは、popBackStack()
を実行する前にその値を変更します。
フラグメントA:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val navController = findNavController();
// We use a String here, but any type that can be put in a Bundle is supported
navController.currentBackStackEntry?.savedStateHandle?.getLiveData("key")?.observe(
viewLifecycleOwner) { result ->
// Do something with the result.
}
}
フラグメントB:
navController.previousBackStackEntry?.savedStateHandle?.set("key", result)
navController.popBackStack()