【Androidアプリケーションの設定画面を作ろう】PreferenceActivityのヘッダーリストを更新する

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

PreferenceActivityは設定画面を作るためのActivityです。
Android3.0(API レベル 11)を境に前と後で実装方針が大きく変化しています。
  • Android3.0以前はPreferenceActivityを単体で使い設定画面を作成します。
  • Android3.0以後は「ActivityとPreferenceFragment」や「PreferenceActivityとPreferenceFragment」を組み合わせて作成します。
Android3.0(API レベル 11)以降はPreferenceActivityで直接設定項目を操作することは非推奨となり、 通常のActivityにPreferenceFragmentを配置して作成するか、PreferenceActivityにPreferenceFragmentを配置して複数階層構造を作る方法が推奨されています。 今回は、PreferenceActivityに定義されているヘッダーリストを更新するメソッドを説明します。

ヘッダーリストの更新をする

void invalidateHeaders()を使うことでヘッダーリストの更新を要求することができます。
onBuildHeadersが再度呼ばれます。その後、PreferenceActivity.Header onGetNewHeader()が呼ばれます。
onGetNewHeaderをオーバーライドすることで初期表示の設定画面を選択することができます。
    private boolean isPatternA = true;

    @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) {
                isPatternA = !isPatternA;
                invalidateHeaders();
            }
        });
        setListFooter(footerView);
    }

    @Override
    public void onBuildHeaders(List<Header> target) {
        if (isPatternA) {
            loadHeadersFromResource(R.xml.pref_headers_pattern_a, target);
        } else {
            loadHeadersFromResource(R.xml.pref_headers_pattern_b, target);
        }
    }

    @Override
    public Header onGetNewHeader() {
        Header header = new Header();
        header.fragment = Prefs1Fragment.class.getName();
        header.breadCrumbTitle = "onGetNewHeader";
        return header;
    }