PreferenceActivityからIntentを呼び出す


アプリケーションの設定画面の作成時に、設定項目の中で別画面を呼び出したい時など、
PreferenceActivityの内部でIntentを使用したいケースがあると思います。
本エントリでは、PreferenceActivityからIntentを呼び出す方法を紹介します。

過去にTechBoosterでは、PreferenceActivityの使用方法を以下エントリで紹介しています。

PreferenceActivityからIntentを呼び出す方法は、設定画面を簡単に作るのエントリでも少し触れていますが、

本エントリでは、

1.onPreferenceClickメソッドを使用したIntent呼び出し
2.XML内部でのIntent呼び出し
cf. PreferenceCategoryについて

の2種のIntent呼び出しとPrefereneCategoryについて、紹介していきます。

1.onPreferenceClickメソッドを使用したIntent呼び出し

特定のPreferenceを押下した際にIntentを呼び出すために、onClickメソッドを登録します。
PreferenceにはPreferenceScreenを登録し、KeyやTitleをセットしています。(preference.xml Line:4 5)

preference.xml

1
2
3
4
5
6
7
8
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="PreferenceCategory - 1">
        <PreferenceScreen android:summary="ソースコードのIntentから"
            android:title="Move Next Activity1"
            android:key="preferenceKey1">
        </PreferenceScreen>
    </PreferenceCategory>
</PreferenceScreen>

上記のXMLをPreferenceActivityで読み出し、表示しています。(PreferenceCustomSample.java Line:3)
XMLにより設定したkeyから、PrefereneScreenのインスタンスを取得し、onPreferenceClickListenerを設定しています。
onPreferenceClickにおいて、Intentを呼び出すことで画面遷移を実現しています。(PreferenceCustomSample.java Line:9〜)

PreferenceCustomSample.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preference);
 
    // PreferenceScreenからのIntent
    PreferenceScreen nextMove1 = (PreferenceScreen) findPreference("preferenceKey1");
    nextMove1.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
 
            // Activityの遷移
            Intent nextActivity = new Intent(
                    PreferenceCustomSampleActivity.this,
                    org.jpn.techbooster.PreferenceSample2.Sample2Activity.class);
 
            startActivity(nextActivity);
            return true;
        }
    });
}

2.XML内部でのIntent呼び出し

1であげた方法のほかに、XML内部でIntentを書き込む方法があります。
PreferenceScreenを登録し、その内部でIntentタグを記述します。(preference.xml Line:6〜)
XMLへの記述になるため、静的になってしまいますが、Javaソースコードを記述する必要がないため、
ソースコードをきれいに見せる事が可能です。

preference.xml

1
2
3
4
5
6
7
8
9
10
11
(...略...)
<PreferenceCategory android:title="PreferenceCategory - 2">
        <PreferenceScreen android:title="Move Next Activity2"
            android:summary="Preference.xmlのIntentから"
            android:key="preferenceKey2">
            <intent android:action="android.intent.action.VIEW"
                android:targetPackage="org.jpn.techbooster.PreferenceSample2"
                android:targetClass="org.jpn.techbooster.PreferenceSample2.Sample2Activity" />
        </PreferenceScreen>
</PreferenceCategory>
(...略...)

cf. PreferenceCategoryについて

PreferenceActivityで作成した設定画面では、カテゴリーごとにタイトルを入れることができます。
(以下図、赤枠部分)

カテゴリーはPreferenceCategoryタグで囲んだ部分に適用され、表示されます。

1
2
3
4
5
6
7
8
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="PreferenceCategory - 1">
        <.......ひとつめの設定カテゴリー>
    </PreferenceCategory>
    <PreferenceCategory android:title="PreferenceCategory - 2">
        <.......ふたつめの設定カテゴリー>
    </PreferenceCategory>
</PreferenceScreen>