【Androidアプリケーションの設定画面を作ろう】PreferenceActivityのシングルペインモード
PreferenceActivityは設定画面を作るためのActivityです。
Android3.0(API レベル 11)を境に前と後で実装方針が大きく変化しています。
- Android3.0以前はPreferenceActivityを単体で使い設定画面を作成します。
- Android3.0以後は「ActivityとPreferenceFragment」や「PreferenceActivityとPreferenceFragment」を組み合わせて作成します。
任意のFragmentを起動する
シングルモードではヘッダーリストのアイテムをクリックすることで、アイテムに対応したコンテンツペインを持ったActivityが起動します。この動作をJavaコードで行うためにはPreferenceActivity#startWithFragmentを使用します。
このメソッドには下記の2つのオーバロードが存在します。
void startWithFragment(String fragmentName, Bundle args, Fragment resultTo, int resultRequestCode) |
|
||||||||||||
void startWithFragment(String fragmentName, Bundle args, Fragment resultTo, int resultRequestCode, int titleRes, int shortTitleRes) |
|
@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) { startWithFragment(Prefs1Fragment.class.getName() , new Bundle() , null , 0 , 0 , 0); } }); setListFooter(footerView); }
コンテンツペインを起動する時のIntent
コンテンツペインを持ったActivityの起動に使用する時にはIntent onBuildStartFragmentIntent(String fragmentName, Bundle args, int titleRes, int shortTitleRes)が呼ばれます。onBuildStartFragmentIntentをオーバーライドすることでIntentの内容を書き換えることができます。
String fragmentName | 起動するFragmentの名前が設定されています。 |
Bundle args | 起動するFragmentに渡すデータが設定されています。 |
int titleRes | タイトルの文字列リソースIDが設定されています。 |
int shortTitleRes | 省略タイトルの文字列リソースIDが設定されています。 |
extra_prefs_show_button_bar | ボタンバーの表示・非表示を設定します。trueの場合は表示、falseの場合は非表示となります。 |
extra_prefs_set_next_text | 次へボタンに表示される文字列を設定します。文字列が設定された時はボタンに文字列が表示され、設定されていない時は非表示になります。ボタンをクリックするとActivityが終了し、Activity.RESULT_OKがリザルトコードとして設定されます。 |
extra_prefs_set_back_text | 戻るボタンに表示される文字列を設定します。文字列が設定された時はボタンに文字列が表示され、設定されていない時は非表示になります。ボタンをクリックするとActivityが終了し、Activity.RESULT_CANCELEDがリザルトコードとして設定されます。 |
extra_prefs_show_skip | スキップボタンの表示・非表示を設定します。trueの場合は表示、falseの場合は非表示となります。ボタンをクリックするとActivityが終了し、Activity.RESULT_OKがリザルトコードとして設定されます。 |
@Override public Intent onBuildStartFragmentIntent(String fragmentName, Bundle args, @StringRes int titleRes, int shortTitleRes) { // タイトルの文字列リソースIDを変更する titleRes = R.string.pref_title_add_friends_to_messages; Intent intent = super.onBuildStartFragmentIntent(fragmentName, args, titleRes, shortTitleRes); // ボタンバーを表示する intent.putExtra("extra_prefs_show_button_bar" ,true); // 次へボタンのテキストを指定する intent.putExtra("extra_prefs_set_next_text" ,"次へ"); // 戻るボタンのテキストを指定する intent.putExtra("extra_prefs_set_back_text" ,"戻る"); // スキップボタンの表示を指定する intent.putExtra("extra_prefs_show_skip" ,true); return intent; }