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 件のコメント:
コメントを投稿