pref.xml
PreferenceScreenに入れ子でPreferenceScreenを配置します。
さらに入れ子でCheckBoxPreferenceを配置します。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen android:summary="PreferenceScreen要約" android:title="PreferenceScreenタイトル" android:key="@string/pref_screen"> <CheckBoxPreference android:key="@string/checkbox" android:summary="要約" android:title="タイトル"> </CheckBoxPreference> </PreferenceScreen> </PreferenceScreen>
子のCheckBoxPreferenceのチェック状態を変更したとき、子のCheckBoxPreferenceの要約を変更するのはAndroid アプリ設定画面を作成する CheckBoxPreference と同じです。
子のCheckBoxPreferenceのチェック状態を変更したとき、親のPreferenceScreenの要約を変更するには、いくつか方法があります。
子画面(PreferenceScreenをクリックして開く画面)は、新しいアクティビティではないため、本体の戻るボタンで親画面に戻ってもonResume()などは発生しません。
そこでPreferenceScreenのOnPreferenceClickListenerをハンドルし、子画面のオブジェクトをgetDialog()メソッドで取得します。
取得したDialogオブジェクトのOnDismissListenerをハンドルし、子画面が破棄されたタイミングで親画面の要約を変更します。
package my.study.android; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.preference.Preference.OnPreferenceClickListener; import android.widget.ListView; public class MainActivity extends PreferenceActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //xmlレイアウトの読み込み this.addPreferencesFromResource(R.xml.pref); //親のPreferenceScreen CharSequence csScreenPrefParent = getText(R.string.prefscreen_Parent); PreferenceScreen screenPref = (PreferenceScreen)findPreference(csScreenPrefParent); //OnPreferenceClickListenerをハンドルする screenPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){ @Override public boolean onPreferenceClick(Preference preference) { return screenPreference_OnPreferenceClick(preference); }}); } private boolean screenPreference_OnPreferenceClick(Preference preference){ PreferenceScreen screenPref = (PreferenceScreen) preference; //子画面オブジェクトを取得する Dialog d = screenPref.getDialog(); //子画面のOnDismissListenerをハンドルする d.setOnDismissListener(new OnDismissListener(){ @Override public void onDismiss(DialogInterface dialog) { Dialog_OnDismiss(dialog); }}); return true; } private void Dialog_OnDismiss(DialogInterface dialog){ //子のCheckPreferenceのチェック状態を取得する CharSequence csCheckPrefChild = getText(R.string.prefchk_child); CheckBoxPreference pref_checkChild = (CheckBoxPreference)findPreference(csCheckPrefChild); String summary = null; if (pref_checkChild.isChecked() == true) { summary = "Checked:True"; } else { summary = "Checked:False"; } //親のPreferenceScreenの要約を変更する CharSequence csScreenPrefParent = getText(R.string.prefscreen_Parent ); PreferenceScreen screenPref = (PreferenceScreen)findPreference(csScreenPrefParent); screenPref.setSummary(summary); //再描画 ListView v = this.getListView(); v.invalidateViews(); } }
【関連項目】
Android プリファレンスの編集
Android アプリ設定画面を作成する
Android アプリ設定画面を作成する CheckBoxPreference
Android アプリ設定画面を作成する EditTextPreference
Android アプリ設定画面を作成するRingtonePreference
Android アプリ設定画面を作成するListPreference
Android アプリ設定画面を作成する 依存関係を設定する
Android アプリ設定画面を作成する PreferenceScreen
Androidアプリ設定画面を作成する PreferenceScreen(別アクティビティ)
0 件のコメント:
コメントを投稿