4

据我所知,在运行 4.x 的智能手机上,当您有一个带有标头的 PreferenceActivity 时,操作系统将首先创建一个包含标头的活动。当用户单击标题列表中的一个项目时,将创建另一个表示该条目的 PreferenceFragment 的活动。在平板电脑上,标题列表和这个片段属于同一个活动,并同时出现在屏幕上。

所以,问题是这样的。当用户在 PreferenceFragment 中,并且他在那里更改了一些设置时,我想更新相应的标题摘要。我从 onBuildHeaders() 调用中引用了 headers 对象:

@Override
public void onBuildHeaders(List<Header> aTarget) {
    ...
    headers = aTarget;
}

现在为了更新标题,我遍历这个列表并检查 id:

private void setHeaderSummary(int id, String summary) {
    for (Header header : headers) {
        if (header.id == id) {
            header.summary = summary;
            invalidateHeaders();
            return;
        }
    }
}

这在平板电脑上非常有效,但在智能手机上却没有效果。当用户从 PreferenceFragment 返回到第一个 PreferenceActivity(通过点击 Back 按钮)时,标题保持不变。

4

1 回答 1

3

我在输入问题时想出了解决方案。在第二个活动(包含 PrefenceFragment 的活动)中调用 invalidateHeaders()。它应该在初始活动(包含标题的活动)中调用。这不是最漂亮的解决方案,但我保留了对父活动的引用,并且 onResume() 如果首选项发生更改,我会使标题无效。

于 2012-11-23T12:59:27.347 回答