【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;
}