从嵌套的PreferenceScreen返回时更改摘要

时间:2011-07-20 01:03:29

标签: android

我有一个带有嵌套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(),但这也不起作用。

1 个答案:

答案 0 :(得分:1)

我找到了解决办法。显然,摘要已更新,但父屏幕上的视图未被无效/重绘。

所以我在更新摘要后执行此操作:

mHandler.post(new Runnable(){
            public void run(){onContentChanged();
        }});

我把它作为预防措施放在Handler中,因为我不确定从哪个线程调用onSharedPreferenceChanged()。