我有一个带有嵌套PreferenceScreen的PreferencesActivity,因此PreferenceScreen在首选项列表中有自己的行,当您点击它时,您会看到更多选项。
当用户更改其中一个选项时,我会更新该选项的摘要以显示用户选择的内容。
我还想更改主列表上PreferenceScreen的摘要,以显示其子设置的值。我正在使用OnSharedPreferenceChangeListener一次更新两个摘要。但是,只会更改首选项的摘要,而不会更改首选项屏幕的摘要。
以下是简化代码:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(SUB_PREFERENCE)){
updateSubPreferenceSummary(); //works
updatePreferenceScreenSummary(); //doesn't work
} else if (key.equals(SOME_OTHER_PREF_IN_ROOT_OF_PREFERENCEACTIVITY) {
updatePreferenceScreenSummary(); //works. (not what I want--just illustrating issue)
}
}
我的理论是Android在忽略第一个屏幕时它不可见,因此它不会更新。我尝试重写onBackPressed(),但这也不起作用。
答案 0 :(得分:1)
我找到了解决办法。显然,摘要已更新,但父屏幕上的视图未被无效/重绘。
所以我在更新摘要后执行此操作:
mHandler.post(new Runnable(){
public void run(){onContentChanged();
}});
我把它作为预防措施放在Handler中,因为我不确定从哪个线程调用onSharedPreferenceChanged()。