アプリケーションの設定で CheckBoxPreference の変更を確認するようにユーザーに依頼したいと考えています。OnPreferenceClickListener と OnSharedPreferenceChangeListener の両方に AlertDialog を配置しようとしましたが、設定がクリックされると CheckBoxPreference の変更をキャンセルできませんでした。ご協力いただきありがとうございます。
ネイサン、私は次の2つのアイデアを試しました:
1) 次のように PreferenceActivity に OnPreferenceClickListener を実装します。
@Override
public boolean onPreferenceClick(Preference preference) {
new AlertDialog.Builder(this)
.setTitle("Move Data to SD card")
.setMessage("This will ...... Are you sure?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
CheckBoxPreference checkBoxPref = (CheckBoxPreference)findPreference(getString(R.string.prefSDEpisodes_key));
checkBoxPref.setChecked(!checkBoxPref.isChecked() );
}
})
.show();
return false;
}
実際には機能しますが、ダイアログ ボックスの背後のバックグラウンドで CheckBoxPrefence の状態が変化するのをユーザーが見るため、このソリューションには満足できません。これは、ボックスを元に戻すという回避策にすぎません。これはまったくきれいではありません。変更前にコントロールを取得する必要があります。
2) onSharedPreferenceChanged() で同様のコードを使用して PreferenceActivity に OnSharedPreferenceChangeListener を実装しますが、この場合、setNegativeButton() でボックス値を元に戻すと、プログラムによって設定変更イベントが何度もトリガーされます。確認ダイアログ ボックスを取り除く唯一の方法は、[はい] を選択することです。
簡単な解決策がない場合は、CheckBoxPrefence を拡張する準備ができていますが、どのように? どのメソッドをオーバーライドする必要がありますか?