从PreferenceActivity调用的自定义DialogPreference在解除对话框时不会调用OnPreferenceChange()。
我认为persistXXXX()是触发器:
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
persistString(s);
}
}
但是onPreferenceChanged()没有被调用。
所有其他标准偏好设置类型都有效(例如EditTextPreference,ListPreference等)。
所以问题是:是什么触发了这种偏好类型的OnPreferenceChange()?
答案 0 :(得分:1)
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(this);
sp.registerOnSharedPreferenceChangeListener(this);
}
我想,你缺少registerOnSharedPreferenceChangeListener
答案 1 :(得分:1)
接受的答案对我不起作用。可能也是由于我的设置所致,因为我使用了PreferenceFragmentCompat
而不是PreferenceActivity
等。深入研究Preference
的源代码会导致一个非常简单的解决方案:
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
persistString(s);
callChangeListener(s); // the solution!
}
}
或者就我而言(单击按钮,Kotlin):
val button = holder?.findViewById(R.id.my_button)
button?.setOnClickListener {
persistString(s)
callChangeListener(s) // the solution!
}