Я испытываю ту же проблему, но onContentChanged () не работает для меня. Моя проблема связана с настройками PreferenceScreen, которые находятся на глубине более одного уровня от корня.
Следуя вашему примеру, если вы сначала создали PreferenceScreen «Учетные записи», а затем добавили в него каждый из объектов PreferenceScreen вашей отдельной учетной записи. Как это:
Root Screen
-> "Accounts" screen
-> "foo@example.com" screen
-> edit username
-> edit password
-> etc...
-> "bar@example.com" screen
-> "baz@example.com" screen
-> etc...
Если пользователь отредактировал свое имя пользователя и нажал кнопку «Сохранить», вызов PreferenceActivity.onContentChanged (), по-видимому, влияет только на прямых потомков корневого PreferenceScreen. Заголовки и резюме экранов третьего поколения не перерисовываются, все еще отражая старые значения.
Просматривая код для onContentChanged (), кажется, что он просто заново привязывает () корневой экран к ListView ListActivity, хотя я не думаю, что последующие PreferenceScreens когда-либо привязываются к ListView (не так ли?) так что мы не можем вручную ничего связать ...
Единственный обходной путь, который я могу придумать, - это создать подменю в виде изолированных PreferenceActivitys вместо PreferenceScreens, чтобы мы могли преднамеренно вызвать onContentChanged () для нашего прямого предка. Но это даже больше, чем нынешний обходной путь. Есть идеи?