【Android】Androidの基本を覚えた後に覚えたいこと~はじめてのFragment①~
【Android】Androidの基本を覚えた後に覚えたいこと~はじめてのFragment②~
の続きです。
今回はActivityとの連携をまとめます。
連携
ActivityとそのActivityに属するFragmentは直接やりとりをすることができます。
FragmentがActivityを呼ぶ、使うために
View listView = getActivity().findViewById(R.id.list);
getActivityメソッドで自身が紐付けられているActivityのインスタンスを取得でき、処理をすることができます。
上の例ではviewを取得しています。
ActivityがFragmentを呼ぶ、使うために
SampleFragment fragment = (SampleFragment) getFragmentManager().findFragmentById(R.id.sample_fragment);
findFragmentByIdメソッド、またはfindFragmentByTagメソッドを用いることでFragmentのインスタンスを取得できます。
イベントの共有
Fragment上で発生したイベントをActivityに通知する方法です。
たとえば、Fragment上でのクリックイベントは、Activityに自動的に通知されるわけではありません。
クリックイベントをActivityにも通知したければ、通知するように処理を入れなければいけません。
大まかに説明すると、Frgamentにコールバックのためのインターフェースを定義し、Activityでそのインターフェースを実装する、ということをします。
以下に詳しく説明します。
今回やりたいこと
ListFragmentの一項目をクリックしたら、Activity上でそのクリックを検知してLogを出力します。
Fragmentにコールバック用のインターフェースを定義する
public static class SampleFragment extends ListFragment {
public interface OnItemSelectedListener {
public void onItemSelected();
}
}
今回はListFragmentを継承しています。
このような感じでFragmentにコールバック用のインターフェースを定義します。
Activityでインターフェースを実装する
public class MainActivity extends FragmentActivity implements SampleFragment.OnItemSelectedListener{
@Override
public void onItemSelected(){
Log.d("MainActivity ","excute onItemSelected()");
}
}
通知したいActivityで、Fragmentに定義したコールバック用のインターフェースを実装します。
これから、Fragment上でのリストに対するクリック動作が発生したときにonItemSelected()が実行されるようにしていきます。
FragmentからActivityに通知する
public static class SampleFragment extends ListFragment {
// 先ほど定義したコールバック用のインターフェース
public interface OnItemSelectedListener {
public void onItemSelected();
}
// 自身と紐づいたActivityの参照が格納される
OnItemSelectedListener listener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 紐づいたActivityの参照を格納。OnItemSelectedListenerを実装していない場合はExceptionが発生します。
try {
listener = (OnItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnItemSelectedListener");
}
}
@Override
// ListFrgament定義されている。リストが選択されると呼ばれる。
public void onListItemClick(ListView l, View v, int position, long id) {
listener.onItemSelected();
}
}
onAttach()は、Activityと紐づいたときに呼ばれるメソッドで、引数のActivityは紐づくActivityです。
あとはActivityにFragmentを追加する処理を書くことで、Fragmentのクリック動作をActivityに通知することが可能になります。
Fragmentの基本については今回の記事でいったん終わりにしようと思います。