为什么自定义DialogPreference不会在onSharedPreferenceChanged侦听器上触发?

urS*_*Sus 4 android listener sharedpreferences dialog-preference

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

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我实际上并不想坚持任何东西,只是触发onSharedPreferenceChanged监听器,所以我可以在活动中处理它.但我无法弄清楚如何触发它

//解

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

nan*_*esh 5

onSharedPreferenceChanged因为注册了内置回调而调用sharedpreference,所以除非你改变与dialogPreference相关的键,否则你不会得到onSharedPreferenceChanged回调.

所以你可以做的是每次关闭对话框,你可以改变key中的值.像下面的东西

text = getPersistedString("1")
if(text.length() > 10)
   text = "1";
persistString(text+"1");
Run Code Online (Sandbox Code Playgroud)

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