【Androidアプリケーションの設定画面を作ろう】PreferenceActivity.Headerの使い方
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 extras | PreferenceActivityに渡すデータをBundleインスタンスで設定します。 |
public Bundle fragmentArguments | Fragmentに渡すデータを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); }