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由于在 上注册的内置回调而被调用sharedpreference,因此除非您更改与 dialogPreference 关联的键,否则您将不会获得onSharedPreferenceChanged回调。

因此,您可以做的是每次关闭对话框时,您都可以更改键中的值。像下面的东西

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

确保您的 dialogPreference 有一个键和 android:persistent 在 xml 中为 true

于 2012-12-15T19:29:59.533 回答