Android 为什么自定义对话框首选项不会在onSharedPreferenceChanged侦听器上触发?

Android 为什么自定义对话框首选项不会在onSharedPreferenceChanged侦听器上触发?,android,listener,sharedpreferences,dialog-preference,Android,Listener,Sharedpreferences,Dialog Preference,我试图在“首选项”中设置对话框首选项,用户只需单击“肯定”按钮即可触发某些操作。(清除数据库?否|是) 实际上我不想保留任何内容,只要触发SharedPreferenceChanged listener,这样我就可以在活动中处理它。但我不知道怎么触发它 //解决方案 @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if(p

我试图在“首选项”中设置对话框首选项,用户只需单击“肯定”按钮即可触发某些操作。(清除数据库?否|是)

实际上我不想保留任何内容,只要触发SharedPreferenceChanged listener,这样我就可以在活动中处理它。但我不知道怎么触发它

//解决方案

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

调用
onSharedPreferenceChanged
是因为
SharedReference
上注册了内置回调,因此除非您更改与dialogPreference关联的键,否则将无法获得
onSharedPreferenceChanged
回调

所以,您可以做的是每次关闭对话框时,都可以更改键中的值。像下面这样

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

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

可以在
onDialogClosed()中调用
notifyChanged()
callChangeListener()
?我想callChangeListener就是您需要的。我第一次尝试了,它不起作用--我可以知道为什么必须使用persistBoolean吗?我们可以用其他的比如persistLong…@CheokYanCheng它没关系,你可以用long,布尔值只是“方便”,因为你可以用它“切换”真假!操作员总是触发侦听器,不必担心
text = getPersistedString("1")
if(text.length() > 10)
   text = "1";
persistString(text+"1");