【Androidアプリケーションの設定画面を作ろう】PreferenceActivityのメソッド
PreferenceActivityは設定画面を作るためのActivityです。
Android3.0(API レベル 11)を境に前と後で実装方針が大きく変化しています。
- Android3.0以前はPreferenceActivityを単体で使い設定画面を作成します。
- Android3.0以後は「ActivityとPreferenceFragment」や「PreferenceActivityとPreferenceFragment」を組み合わせて作成します。
コンテンツペインのクリックを検知する
boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref)はコンテンツペインの fragment属性が設定された項目をクリックした時に呼ばれるメソッドです。PreferenceActivity#onPreferenceStartFragmentをオーバーライドすることでクリックされたことを検知することができます。
第一引数はコンテンツペインに設置されているFragmentのインスタンス、第二引数はクリックされた設定項目のPreferenceインスタンスがそれぞれ渡されます。
@Override public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) { Log.d(TAG, "onPreferenceStartFragment: " + pref.getFragment()); return super.onPreferenceStartFragment(caller, pref); }
コンテンツペインを変更する
void startPreferencePanel(String fragmentClass, Bundle args, int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode)はコンテンツペインを変更するメソッドです。PreferenceActivity#startPreferencePanelはシングルモードとマルチペインモードで動作が異なります。
シングルモードではPreferenceActivity#startWithFragmentを使ってコンテンツペインを変更します。
マルチペインモードではFragmentManagerを使ってコンテンツペインを変更します。
String fragmentClass | 起動するFragmentの完全修飾名を設定します。 |
Bundle args | 起動するFragmentに渡すデータを設定します。 |
int titleRes | タイトルに設定する文字列リソースIDを設定します。 |
CharSequence titleText | タイトルに設定する文字列で設定します。 |
Fragment resultTo | Fragment#setTargetFragmentを使い結果を返すFragmentを設定します。 |
int resultRequestCode | Fragment#setTargetFragmentを使い結果を返す時のリクエストコードを設定します。 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button footerView = new Button(this); footerView.setText("Footer"); footerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startPreferencePanel(Prefs1Fragment.class.getName() , new Bundle() , 0 , "aaa" , null , 0); } }); setListFooter(footerView); }
コンテンツペインを終了する
void finishPreferencePanel(Fragment caller, int resultCode, Intent resultData)はコンテンツペインを終了させるためのメソッドです。PreferenceActivity#finishPreferencePanelはシングルモードとマルチペインモードで動作が異なります。
シングルモードではPreferenceActivity#setResultの後にPreferenceActivity#finishを使ってコンテンツペインが終了します。
マルチペインモードではPreferenceActivity#onBackPressedを使ってコンテンツペインのFragmentを戻し、Fragment#onActivityResultで結果を返却します。
Fragment caller | シングルペインモードやマルチペインモードで結果を返す必要がない場合ではnullを渡します。 マルチペインモードで結果を返す場合はコンテンツペインに設定されているFragmentインスタンスを渡します。 |
int resultCode | 結果を返す先に渡すリザルトコードを設定します。 |
Intent resultData | 結果を返す先に渡すデータを設定します。 |
public static class Prefs1Fragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { ((MyPreference1Activity)getActivity()).finishPreferencePanel(this, Activity.RESULT_OK,new Intent()); return super.onPreferenceTreeClick(preferenceScreen, preference); } }
ヘッダーリストの表示・非表示を変更する
boolean onIsHidingHeaders()はヘッダーリストの表示・非表示を切り替えるために使用します。PreferenceActivity#onIsHidingHeadersをオーバーライドし表示の場合はtrueを、非表示の場合はfalseを返却することで制御することができます。
@Override public boolean onIsHidingHeaders() { return true; }