web-dev-qa-db-ja.com

Android Navigationを使用して前のフラグメントにデータを戻す

Koinライブラリーとともに、Androidアーキテクチャコンポーネント(ナビゲーションとセーフアーグ、モデルの表示))を使い始めました。

現在、2つのフラグメント間で引数を渡す際に問題があります。フラグメントAからフラグメントBに文字列値を渡し、フラグメントBでこの値を変更して、フラグメントAに返す必要があります。

私の問題に対する1つの可能な解決策-共有ビューモデルを見つけました。残念ながら、画面間で値を渡したり変更したりできるため、このアプローチには1つの問題がありますが、フラグメントAが別の宛先にナビゲートすると、共有ビューモデルの値は引き続き保存され、クリアされません。

Android Navigation?)のフラグメント間でデータを渡したり変更したりするための別の解決策はありますか(フラグメントAが破棄されたときに)この1つの値を手動でクリアしないようにします。

11
rubin94

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()
1
zgluis