複数のFragment間を跨いでデータの受け渡しをするには、
ちょっとしたテクニックが必要です。
この記事では複数のFragment間を跨いでデータの受渡しをする方法を紹介します。
複数のActivity間を跨いでデータを受渡しするときと同じ方法
複数のActivity間を跨いでデータの受渡しをするときと同じ方法を使用することができます。詳しくは以下の記事にまとめています。 概要を言うと、以下の3通りの方法があります。
- Intentにおけるデータ受渡しを利用する
- Application継承クラスを作成する
- ローカルデータの保存/読込を利用する
2.のApplication継承クラスを作成する方法を個人的にはオススメします。
Activityオブジェクトを用いてデータを受け渡す
Fragmentを実装している場合にはそれらの方法に加えて、Activityオブジェクトを利用する方法があります。
まずはActivity側に受渡しをするオブジェクトを生成します。
以下の例ではint型としていますが、オブジェクトのクラスはなんでも大丈夫です。
MainActivity.java
public class MainActivity extends AppCompatActivity {
public int SharedValue = -1;
//...
}
次にFragment側でgetActivityでActivityオブジェクトを取得して、件のAcitivtyにキャストします。そうすれば、受渡しをしたいオブジェクトにアクセスできます。
Fragment1.java
public class Fragment1 extends Fragment {
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main, container, false);
MainActivity ma = (MainActivity)getActivity();
int value = ma.SharedValue;
return view;
}
}
まとめ
この記事では、Fragmentを使用したときにActivityオブジェクトを利用してデータを受け渡す方法を紹介しました。通常はFragmentとActivityは1対1であることが大多数なので問題ないと思いますが、この方法ではFragmentの上位のActivityが固定されてしまうというデメリットがあります。
個人的には以下の記事で紹介したApplication継承クラスを利用する方法をオススメします。
