写了一个PreferenceActivity,层次是这样的:
PreferenceScreen(BEGIN-END)
--EditTextPreference(BEGIN)
--EditTextPreference(END )
EditTextPreference
在BEGIN的值改变后,在它的OnPreferenceChangeListener里更改BEGIN的summary和B-E的summary(注意到,在更改BEGIN的时候B-E是不可见的,需要按下返回键回到B-E这个层次的界面),但是只有BEGIN的summary更新了。
查了资料,在下面的链接里找到了相应的讨论:
http://code.google.com/p/android/issues/detail?id=931
调用PreferenceActivity的onContentChanged就可以更新B-E的summary。
另外,要实现更新Preference,比较推荐的做法不是使用某一个Preference的OnPreferenceChangeListener,而是在PreferenceActivity实现OnSharedPreferenceChangeListener集中处理。
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if(0 == key.compareTo(sleepBeginKey) || 0 == key.compareTo(sleepEndKey)) {
playTime.setSummary(sleepBegin + "-" + sleepEnd);
onContentChanged();
}
}