У меня есть PreferenceActivity с кучей (Sub) PreferenceScreens. Каждый такой (Sub) PreferenceScreen представляет собой учетную запись и имеет имя учетной записи в качестве ее названия.Обновите существующий элемент предпочтений в PreferenceActivity после возврата из (sub) PreferenceScreen
PreferenceScreen root = mgr.createPreferenceScreen(this);
for (MyAccountClass account : myAccounts) {
final PreferenceScreen accScreen = mgr.createPreferenceScreen(this);
accScreen.setTitle(account.getUsername());
// add Preferences to the accScreen
// (for instance a "change username"-preference)
...
root.add(accScreen);
}
Когда пользователь входит в подраздел PreferenceScreen и редактирует-имя пользователя учетной записи, я хочу, чтобы внешний PreferenceScreen обновить это PreferenceScreen-заголовок для данного аккаунта.
Я попытался добавить ...
usernamePref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
accScreen.setTitle(newValue.toString());
return true;
}
});
... но accScreen.setTitle не кажется, вступает в силу на внешнем PreferenceScreen. Я отмечаю, что вызов onContentChanged();
действительно заставляет его работать, но я понимаю, что это, вероятно, не самый предпочтительный способ сделать это.
Я подозреваю, что должен позвонить по телефону postInvalidate()
, но я действительно не могу понять, на какой точке зрения и когда это делается.
PreferenceScreen android:summary update ! может испытывать ту же проблему, что и я.
Любая помощь приветствуется.
Ничего себе, звучит как путь. На данный момент у меня нет SDK для Android, но я возьму ваше слово за то, что он работает. Большой! – aioobe
Хорошее обходное решение для ошибки - спасибо! – James
это также сбросит все изменения, внесенные в предпочтения в фрагменте предпочтения (например, слушатели) после вызова! (или в других изменениях слова, сделанных от вызова этого до тех пор, пока он не закончит восстановление, будет потеряно :)) – ceph3us