据我所知,在运行 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 按钮)时,标题保持不变。