我有一个带有一堆(子)PreferenceScreens 的 PreferenceActivity。每个这样的(子)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();
实际上可以让它工作,但我意识到这可能不是首选的方式。
我怀疑我应该在某处的某个 View 上调用 postInvalidate()
,但我真的不知道在什么 View 上以及何时执行它。
PreferenceScreen android:summary update !可能遇到和我一样的问题。
感谢任何帮助。
最佳答案
我找到了解决办法。我有这样的层次结构,其中每一个都是一个 PreferenceScreen:
main settings
-> users list
-> user1 settings
-> user2 settings
...
在用户列表中,子屏幕的标题取决于用户设置。现在,当我创建用户列表时,我将列表适配器存储到我的 PreferenceActivity 中的一个变量。
PreferenceScreen usersListScreen = ...
userScreenListAdapter = (BaseAdapter)usersListScreen.getRootAdapter();
现在,当编辑 userX 设置时,我在 usersListScreen 中设置标题,然后调用:
userScreenListAdapter.notifyDataSetChanged();
更新列表 UI 并且更改可见。
关于android - 从(子)PreferenceScreen 返回时更新 PreferenceActivity 中现有的 Preference-item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625246/