私が気付いたのは、ヘッダー付きのPreferenceActivityがある場合に4.xを実行しているスマートフォンでは、OSは最初にヘッダーを含むアクティビティを作成します。ユーザーがヘッダーリストから1つのアイテムをクリックすると、そのエントリの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に戻ると([戻る]ボタンを押すことにより)、ヘッダーは変更されません。