android - 从(子)PreferenceScreen 返回时更新 PreferenceActivity 中现有的 Preference-item

标签 android preferences invalidation preferenceactivity

我有一个带有一堆(子)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/

相关文章:

c++ - 使用索引避免迭代器失效,保持干净的界面

python - Django 通过信号使模板缓存失效

java - 根据 XSD 验证 Java Preferences 对象

android - 如何在偏好更改时重新安排警报管理器

Android:在 onResume Activity 中获取当前位置

java - 用于编辑 TextView 大小、样式的按钮

python - 哪个 linux 发行版更适合 Python web 开发?

macos - 如何阻止CFSocket发送回调?

android - 带有 StateListDrawable 的 ImageView 不起作用

android - 如何执行 "RXJava 2 queue jobs"直到值改变?