【Androidアプリケーションの設定画面を作ろう】PreferenceActivityのマルチペインモード
PreferenceActivityは設定画面を作るためのActivityです。
Android3.0(API レベル 11)を境に前と後で実装方針が大きく変化しています。
- Android3.0以前はPreferenceActivityを単体で使い設定画面を作成します。
- Android3.0以後は「ActivityとPreferenceFragment」や「PreferenceActivityとPreferenceFragment」を組み合わせて作成します。
任意のFragmentを起動する
マルチペインモードでコンテンツペインに任意のFragmentを表示するにはvoid startPreferenceFragment(Fragment fragment, boolean push)を使用します。第一引数には表示するFragmentを指定します。第二引数には表示するFragmentをバックスタックに入れるかどうかを指定します。バックスタックに入れる場合はtrueを渡し、入れない場合はfalseを渡します。
@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) {
startPreferenceFragment(new Fragment() , false);
}
});
setListFooter(footerView);
}
任意の設定用Fragmentを起動する
startPreferenceFragmentではどのようなFragmentでも設定することが可能でした。 そのため、妥当な設定用Fragmentを表示するにはPreferenceActivity#switchToHeaderを使用する必要があります。このメソッドで配置されるFragmentはisValidFragmentでFragmentの妥当性を検査されます。
PreferenceActivity#switchToHeaderには下記の2つのオーバーロードが存在します。
| void switchToHeader(String fragmentName, Bundle args) |
| ||||
| void switchToHeader(PreferenceActivity.Header header) |
|
@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) {
switchToHeader(Prefs2Fragment.class.getName() , new Bundle());
}
});
setListFooter(footerView);
}
@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) {
Header header = new Header();
header.fragment = Prefs2Fragment.class.getName();
header.extras = new Bundle();
switchToHeader(header);
}
});
setListFooter(footerView);
}
コンテンツペインの変化を検知する
void onContentChanged()はコンテンツペインが変化した時に呼ばれるメソッドです。PreferenceActivity#onContentChangedをオーバーライドすることでコンテンツペインの変化を検知することができます。
@Override
public void onContentChanged() {
Toast.makeText(this, "onContentChanged", Toast.LENGTH_SHORT).show();
super.onContentChanged();
}