Android 关闭PreferenceActivity时通知ArrayAdapter更改

Android 关闭PreferenceActivity时通知ArrayAdapter更改,android,Android,我有一个ListView,它有一些在PreferenceScreen中设置的次要视觉首选项。这些首选项是简单的布尔值,用于显示或不显示我的ListView中每个项目的特定文本视图。无论如何,当这些首选项更改时,我需要通知我的ArrayAdapter数据已更改,以便重新绘制列表。但是,通过OnSharedPreferenceChangeListener执行此操作并不是最佳选择,因为您可以更改多个首选项,这将导致对ArrayAdapter进行不必要的更新。那么,问题是:在关闭我的Preference

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


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

有几种方法。正如您所注意到的,当ListActivity再次可见时,最好的方法是更新它。 要实现这一目标,您可以:

  • 只需从ListActivity中重写onResume()方法。方法将在活动到达前台时调用

  • 另一个好的解决方案是以以下方式开始您的首选活动:

    
    //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);
    
  • 您还必须在列表活动中实现onActivityResult()。当“首选项”活动关闭时,将调用此方法

    
        @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
            }
        }
    

    PreferenceActivity扩展了活动,所以您可以覆盖onStop并在那里执行这些检查和通知