FragmentにsetArgumentsで値を渡す

2019年5月13日

今回はFragmentに値を渡す方法を説明します。

Activityに値を渡す場合はIntentに値を設定してstartActivityで渡せますが、

Fragmentに値を渡す場合はsetArgumentsを使用します。

 

 

Fragmentに値を渡すActivityのサンプル

FragmentManager fm = getFragmentManager();
FragmentTransaction t = fm.beginTransaction();
SampleFragment fragment = new SampleFragment();
Bundle bundle = new Bundle();
bundle.putExtra("test1", "これはテストです");
bundle.putExtra("test2", 2); 
bundle.putExtra("test3", true); 
// フラグメントに渡す値をセット
fragment.setArguments(bundle);
t.add(R.id.hoge_fragment, fragment, "sample_fragment");
t.commit();

 

bundle.putExtraでFramentに渡したい値を設定する

putExtraの第1引数が値を格納するキーになります。

後程説明しますが値を受け取るFragmentでこのキーを指定するとキーと対になっている値を取得できます。

ちなみにputExtraでは、文字列、整数、booleanの値を入れることができます。

 

値を渡すにはsetArgumentsを使用する

上記コードのsetArgumentsで値(bundle)を渡しています。

 

 

値を受け取るFragmentのサンプル

pubic View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.hoge, container, false);
    // 下記で値を受け取る
    String  test1 = getArguments().getString("test1");
    Int     test2 = getArguments().getInteger("test2");
    boolean test3 = getArguments().getBoolean("test3");
    TextView tv1 = (TextView) view.findViewById(R.id.tv1);
    tv1 .setText(test1);
    return view;
}

 

onCreateViewでgetArgumentsを使用して値を取得する

FragmentにてgetArguments().getString(“test”);で値を取得します。

 

なぜArgumentを使うと良いのか?

setArgumentsやgetArgumentsを使用するのではなく、

Fragmentのコンストラクタで直接値を受け渡しすればいいのでは?と思われた方もいるかもしれませんが、

Fragmentのコンストラクタで値を受け渡すのはやめましょう。

 

なぜならば、Fragmentはシステムから再生成されることが多いので、

Fragmentのコンストラクタで値を受け渡すと再生成時に値が受け取れないからです。

Argumentsを使用しておけばBundleに値が保持されているのでFramgnetの再生成時にも値が受けとれますので、

サンプルに記載しましたようにArgumentsを使用することを強く推奨します。