我试图在首选项中设置对话框首选项,用户只需单击正按钮即可触发某些操作。 (清除数据库?否 | 是)
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 监听器,这样我就可以在 Activity 中处理它。但我不知道如何触发它
//解决方案
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
persistBoolean(!getPersistedBoolean(true));
}
Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult);
}
最佳答案
onSharedPreferenceChanged
被调用是因为在 sharedpreference
上注册了内置回调,所以除非您更改与 dialogPreference 关联的键,否则您将不会获得 onSharedPreferenceChanged
回调。
因此,您可以做的是每次关闭对话框时,您都可以更改键中的值。像下面这样
text = getPersistedString("1")
if(text.length() > 10)
text = "1";
persistString(text+"1");
确保你的 dialogPreference 有一个键和 android:persistent 在 xml 中为真
关于android - 为什么自定义 DialogPreference 不会在 onSharedPreferenceChanged 监听器上触发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13851554/