4

ユーザーがポジティブボタンをクリックするだけでアクションをトリガーする設定でダイアログ設定を作成しようとしています。(データベースをクリアしますか?いいえ|はい)

public class MyDialogPreference extends DialogPreference {

    public MyDialogPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);
        Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult);
    }

}

私は実際には何も永続化したくありません。onSharedPreferenceChangedリスナーをトリガーするだけなので、アクティビティで処理できます。しかし、私はそれをトリガーする方法を理解することはできません

//解決

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if(positiveResult) {
        persistBoolean(!getPersistedBoolean(true));
    }
    Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult);
}
4

1 に答える 1

5

onSharedPreferenceChangedに登録されている組み込みのコールバックが原因で呼び出されるため、sharedpreferencedialogPreference に関連付けられているキーを変更しない限り、onSharedPreferenceChangedコールバックを取得することはできません。

したがって、ダイアログが閉じられるたびに、キーの値を変更できます。以下のようなもの

text = getPersistedString("1")
if(text.length() > 10)
   text = "1";
persistString(text+"1");

dialogPreference にキーがあり、xml で android:persistent が true であることを確認してください

于 2012-12-15T19:29:59.533 に答える