Navigationを使用した簡単なFragment間の引数の受け渡し【AdnroidStduio】

Navigationを使用した遷移時の引数の受け渡し方法 って調べてみるとなんだか複雑そうだったのですが

シンプルに引数を受け渡すだけならBundleを使用した方法が可能でした。


※NavigationでのFragment遷移(BasicActivity)をベースにまとめてみます。

まず、Fragmentの遷移にNavigationControllerのnavigate()を使用していると思いますが

このメソッド、Bundleをパラメータとして受け渡しができます。

  参考:NavController.navigate(int resId, Bundle args)


つまり、コードで記載するとこんな感じになります。

■FirstFragment.java (navigateにBundleを追加する。)

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String strParam = "";

// Bundle
Bundle bundle = new Bundle();
bundle.putString("param1",strParam);
// Navigate
NavHostFragment.findNavController(FirstFragment.this)
.navigate(R.id.action_FirstFragment_to_SecondFragment,bundle);
}
});
}

■SecondFragment.java (onCreate時に引数を取得)

private String param = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (getArguments() != null) {
param = getArguments().getString("param1");
}
}


以上です。(なんとたったこれだけで引数の受け渡しが可能です)

上記のgetArguments()を使用する場面としては、

Navigationを使用しない遷移にて、newInstance()を実装しメソッド内でsetArgument()と合わせて使用するかと思います。

Navigationを使用するとnewInstance()を利用することができませんが、

引数に指定したBundleがgetArgument()で取得可能なので逆にsetArgument()を記載しない分シンプルになりました。


※重要※

Navigationでは Safe Args と呼ばれる Gradle プラグインが存在しており公式(Android Developer)ではSafe Argsを推奨しております。

 Safe Args を使用してタイプセーフにデータを渡す


今回紹介した手順で簡単に引き渡しはできますが可能な限り公式に準拠していきましょう

(いつ使えなくなるかわかりませんし…)

私もSafeArgsの追加方をマスターしたら、またまとめた記事を書こうと思います。


以上、本日の記録。

コメント

このブログの人気の投稿

Activity上に配置されたToolbarをFragment上から変更し、イベントを拾う方法【AndroidStudio】

AlertDialogのボタンをカスタマイズする【AndroidStudio】

レイアウトファイル上にIDが重複している場合の検索と、その有用性について【AndroidStudio】