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

<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

	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

(...略...)
<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タグで囲んだ部分に適用され、表示されます。

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