【Androidアプリケーションの設定画面を作ろう】PreferenceActivity.Headerの使い方

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

PreferenceActivity.HeaderはPreferenceActivityで作成されるヘッダーリストの各アイテム一つを表すクラスです。
PreferenceActivity.Headerを使うことでJavaでヘッダーリストを作成することができます。
PreferenceActivity.Headerは内部にpublicなフィールドが多数定義されています。このフィールドを変更することで、表示内容やクリック時の動作を変更することができます。

ヘッダーリストの表示を変更する

下記のフィールドを変更することでヘッダーリストの表示項目を変更することができます。
public long idヘッダーのIDを設定します。
public CharSequence titleヘッダーのアイテムのタイトルを文字列で設定します。
public int titleResヘッダーのアイテムのタイトルを文字列リソースIDで設定します。
public CharSequence summaryヘッダーのアイテムの説明文を文字列で設定します。
public int summaryResヘッダーのアイテムの説明文を文字列リソースIDで設定します。
public int iconResヘッダーのアイテムのアイコンを画像リソースIDで設定します。

    @Override
    public void onBuildHeaders(List<Header> target) {
        Header header1 = new Header();
        header1.id = target.size();
        header1.title = "タイトル-文字列";
        header1.summary = "説明文-文字列";
        header1.iconRes = R.mipmap.ic_launcher;
        target.add(header1);

        Header header2 = new Header();
        header2.id = target.size();
        header2.titleRes = R.string.app_name;
        header2.summaryRes = R.string.app_name;
        target.add(header2);
    }

フラグメントを起動する

PreferenceActivity.Header#fragmentにFragmentの完全修飾名を設定することで、ヘッダーリストをクリックした時に設定したフラグメントを起動することができます。
    @Override
    public void onBuildHeaders(List<Header> target) {
        Header header1 = new Header();
        header1.id = target.size();
        header1.title = "タイトル-文字列";
        header1.summary = "説明文-文字列";
        header1.iconRes = R.mipmap.ic_launcher;
        header1.fragment = Prefs1Fragment.class.getName();
        target.add(header1);
    }

Intentを発行する

PreferenceActivity.Header#intentにIntentインスタンスを設定することで、ヘッダーリストをクリックした時に設定したIntentが発行されます。
    @Override
    public void onBuildHeaders(List<Header> target) {
        Header header1 = new Header();
        header1.id = target.size();
        header1.title = "タイトル-文字列";
        header1.summary = "説明文-文字列";
        header1.iconRes = R.mipmap.ic_launcher;
        header1.intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
        target.add(header1);
    }

データを渡す

ヘッダーリストをクリックした時にPreferenceActivityやFragmentにデータを渡すことが可能です。
public Bundle extrasPreferenceActivityに渡すデータをBundleインスタンスで設定します。
public Bundle fragmentArgumentsFragmentに渡すデータをBundleインスタンスで設定します。

    @Override
    public void onBuildHeaders(List<Header> target) {
        Header header1 = new Header();
        header1.id = target.size();
        header1.title = "タイトル-文字列";
        header1.summary = "説明文-文字列";
        header1.iconRes = R.mipmap.ic_launcher;
        header1.intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
        header1.extras = new Bundle();
        header1.fragmentArguments = new Bundle();
        target.add(header1);
    }

パンくずの文字を変更する

パンくずの文字を文字列や文字列リソースIDで指定することができます。
public CharSequence breadCrumbTitleパンくずタイトルを文字列で設定します。
public int breadCrumbTitleResパンくずタイトルを文字列リソースIDで設定します。
public CharSequence breadCrumbShortTitleパンくず省略タイトルを文字列で設定します。
public int breadCrumbShortTitleResパンくず省略タイトルを文字列リソースIDで設定します。

    @Override
    public void onBuildHeaders(List<Header> target) {
        Header header1 = new Header();
        header1.id = target.size();
        header1.title = "タイトル-文字列";
        header1.summary = "説明文-文字列";
        header1.iconRes = R.mipmap.ic_launcher;
        header1.fragment = Prefs1Fragment.class.getName();
        header1.breadCrumbTitle = "パンくず-文字列";
        header1.breadCrumbShortTitle = "パンくず省略-文字列";
        target.add(header1);

        Header header2 = new Header();
        header2.id = target.size();
        header2.titleRes = R.string.app_name;
        header2.summaryRes = R.string.app_name;
        header2.breadCrumbTitleRes = R.string.app_name;
        header2.breadCrumbShortTitleRes = R.string.app_name;
        header2.intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
        target.add(header2);
    }