FragmentとActivityの連携について
WEB上でFragmentについて検索すると、関連する内容がたくさんヒットするのですが、残念なことに、日本語による関連サイトが余りにも少ないのが現状です。
そこで、今回は、今更の感はございますが、Fragmentについて、その中でも特に情報が少ないFragmentとActivityの連携についてまとめてみました。
■Fragmentから特定のActivityと連携する場合
①FragmentからActionBarを操作する
まず、FragmentクラスのgetActivity()メソッドによって、Fragmentが関連付けられているActivityのインスタンスを取得します。
public final Activity getActivity ()
--------------------
[Returns]
Return the Activity this fragment is currently associated with.
--------------------
次に、ActivityクラスのgetActionBar ()メソッドによって、ActionBarのインスタンスを取得します。
public ActionBar getActionBar ()
--------------------
[Returns]
The Activity's ActionBar, or null if it does not have one.
--------------------
以下のようなメソッドを用意しておくと便利です。
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
ActionBarクラスのメソッドで、以下のような操作が出来ます。
・アプリアイコンをHomeボタンとする。
actionBar.setHomeButtonEnabled(true);
・アプリアイコンの左に戻るアイコンを追加する。
actionBar.setDisplayHomeAsUpEnabled(true);
・タイトル(サブタイトル)を表示する。
actionBar.setDisplayShowTitleEnabled(true);
・タイトルを設定する。
actionBar.setTitle(int resId);
・サブタイトルを設定する。
actionBar.setSubtitle(int resId);
②FragmentからActivityのメソッドを呼び出す
onAttachメソッドで取得したインスタンスは、Fragmentが関連付けられているActivityのインスタンスなので、このインスタンスからメソッドを呼び出す。
public class MainActivity extends Activity {
---
public void onSectionAttached(int number) {
switch (number) {
case 1:
mTitle = getString(R.string.title_section1);
break;
case 2:
mTitle = getString(R.string.title_section2);
break;
case 3:
mTitle = getString(R.string.title_section3);
break;
}
}
---
public static class PlaceholderFragment extends Fragment {
----
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// MainActivity型でキャストして、onSectionAttachedメソッドを呼び出す
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
}
■Fragmentから任意のActivityと連携する場合
Activityにインタフェースでメソッドを実装して、このメソッドをFragmentから呼び出すことで連携することが出来ます。
public class HeadlinesFragment extends ListFragment {
// OnHeadlineSelectedListenerインタフェース型のメンバ変数
private OnHeadlineSelectedListener mCallback;
// OnHeadlineSelectedListenerインタフェースの宣言
public interface OnHeadlineSelectedListener {
// onArticleSelectedメソッドの宣言
public void onArticleSelected(int position);
}
---
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// OnHeadlineSelectedListenerインタフェース型でキャスト
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// 実装先のメソッドを呼び出す
mCallback.onArticleSelected(position);
// Set the item as checked to be highlighted when in two-pane layout
getListView().setItemChecked(position, true);
}
}
public class MainActivity extends FragmentActivity implements HeadlinesFragment.OnHeadlineSelectedListener {
---
// onArticleSelectedメソッドの実装
public void onArticleSelected(int position) {
---
}
}
参考サイト:http://developer.android.com/training/basics/fragments/communicating.html
そこで、今回は、今更の感はございますが、Fragmentについて、その中でも特に情報が少ないFragmentとActivityの連携についてまとめてみました。
■Fragmentから特定のActivityと連携する場合
①FragmentからActionBarを操作する
まず、FragmentクラスのgetActivity()メソッドによって、Fragmentが関連付けられているActivityのインスタンスを取得します。
public final Activity getActivity ()
--------------------
[Returns]
Return the Activity this fragment is currently associated with.
--------------------
次に、ActivityクラスのgetActionBar ()メソッドによって、ActionBarのインスタンスを取得します。
public ActionBar getActionBar ()
--------------------
[Returns]
The Activity's ActionBar, or null if it does not have one.
--------------------
以下のようなメソッドを用意しておくと便利です。
private ActionBar getActionBar() {
return getActivity().getActionBar();
}
ActionBarクラスのメソッドで、以下のような操作が出来ます。
・アプリアイコンをHomeボタンとする。
actionBar.setHomeButtonEnabled(true);
・アプリアイコンの左に戻るアイコンを追加する。
actionBar.setDisplayHomeAsUpEnabled(true);
・タイトル(サブタイトル)を表示する。
actionBar.setDisplayShowTitleEnabled(true);
・タイトルを設定する。
actionBar.setTitle(int resId);
・サブタイトルを設定する。
actionBar.setSubtitle(int resId);
②FragmentからActivityのメソッドを呼び出す
onAttachメソッドで取得したインスタンスは、Fragmentが関連付けられているActivityのインスタンスなので、このインスタンスからメソッドを呼び出す。
public class MainActivity extends Activity {
---
public void onSectionAttached(int number) {
switch (number) {
case 1:
mTitle = getString(R.string.title_section1);
break;
case 2:
mTitle = getString(R.string.title_section2);
break;
case 3:
mTitle = getString(R.string.title_section3);
break;
}
}
---
public static class PlaceholderFragment extends Fragment {
----
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// MainActivity型でキャストして、onSectionAttachedメソッドを呼び出す
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
}
■Fragmentから任意のActivityと連携する場合
Activityにインタフェースでメソッドを実装して、このメソッドをFragmentから呼び出すことで連携することが出来ます。
public class HeadlinesFragment extends ListFragment {
// OnHeadlineSelectedListenerインタフェース型のメンバ変数
private OnHeadlineSelectedListener mCallback;
// OnHeadlineSelectedListenerインタフェースの宣言
public interface OnHeadlineSelectedListener {
// onArticleSelectedメソッドの宣言
public void onArticleSelected(int position);
}
---
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// OnHeadlineSelectedListenerインタフェース型でキャスト
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// 実装先のメソッドを呼び出す
mCallback.onArticleSelected(position);
// Set the item as checked to be highlighted when in two-pane layout
getListView().setItemChecked(position, true);
}
}
public class MainActivity extends FragmentActivity implements HeadlinesFragment.OnHeadlineSelectedListener {
---
// onArticleSelectedメソッドの実装
public void onArticleSelected(int position) {
---
}
}
参考サイト:http://developer.android.com/training/basics/fragments/communicating.html
コメント
コメントを投稿