0

アプリケーションの設定で 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 を拡張する準備ができていますが、どのように? どのメソッドをオーバーライドする必要がありますか?

4

1 に答える 1