自定义DialogPreference不会在PreferenceActivity中触发OnPreferenceChanged

时间:2013-01-09 20:46:19

标签: android android-preferences

从PreferenceActivity调用的自定义DialogPreference在解除对话框时不会调用OnPreferenceChange()。

我认为persistXXXX()是触发器:

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if(positiveResult) {
        persistString(s);
    }
}

但是onPreferenceChanged()没有被调用。

所有其他标准偏好设置类型都有效(例如EditTextPreference,ListPreference等)。

所以问题是:是什么触发了这种偏好类型的OnPreferenceChange()?

2 个答案:

答案 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!
}