android - 关闭 PreferenceActivity 时通知 ArrayAdapter 更改

标签 android

我有一个 ListView,它有一些在 PreferenceScreen 中设置的次要视觉首选项。这些首选项是简单的 bool 值,用于在我的 ListView 中的每个项目上显示或不显示某些特定的 TextView。无论如何,当这些首选项发生更改时,我需要通知我的 ArrayAdapter 数据已更改,以便重新绘制列表。但是,通过 OnSharedPreferenceChangeListener 执行此操作并不是真正的最佳选择,因为您可以更改多个首选项,这会导致对 ArrayAdapter 进行不必要的更新。那么,对于这个问题:关闭 PreferenceActivity 后,我如何确定我的 ListActivity 何时出现在屏幕上,然后我可以使用它来检查首选项中的更改,然后才通知 ArrayAdapter。

编辑:ArrayAdapter 是我的 ListActivity 的内部类,它被设置为 ListAdapter。

最佳答案

有几种方法可以做到这一点。正如您所注意到的,好的方法是在 ListActivity 再次可见时更新它。 为此,您可以:

  1. 只需覆盖 ListActivity 中的 onResume() 方法即可。当您的 Activity 到达前台时,将调用方法。

  2. 另一个好的解决方案是以这种方式启动您的 PreferenceActivity:

    
    //class member of your list activity
    private static final int CODE_PREFERENCES = 1;
    ...
    //running your preferences from list activity
    Intent preferencesIntent = new Intent().setClass(this, YourPreferences.class);
    startActivityForResult(preferencesIntent, CODE_PREFERENCES);
    

您还必须在列表 Activity 中实现 onActivityResult()。此方法将在首选项 Activity 关闭时调用。


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CODE_PREFERENCES) {
            // notify your adapter that data has changed
        }
    }

关于android - 关闭 PreferenceActivity 时通知 ArrayAdapter 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892135/

相关文章:

Android 媒体播放器导致 "dead thread"消息

android - 优化 RecyclerView/ListView

android - 如何在 Android 上禁用移动数据

android - FragmentTransaction.remove 无效

android - 如何删除出现在 Android 设备表单中文本框内的默认文本?

java - 这个资源是什么?为什么 Android 找不到它?

java - Neokree 抽屉导航 : Gradle DSL method not found: 'compile()'

java - Java 中的 UTF-8 转换

android - 如何在带有文件名的 ListView 中显示文件大小

android - 我想从数据库中检索数据