アプリケーションの設定画面の作成時に、設定項目の中で別画面を呼び出したい時など、
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>