关闭PreferenceActivity时通知ArrayAdapter更改

时间:2009-12-12 03:12:53

标签: android

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

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

2 个答案:

答案 0 :(得分:2)

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

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

  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);
    
  3. 您还必须在列表活动中实现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
            }
        }
    

答案 1 :(得分:0)

PreferenceActivity扩展了Activity,因此您可以覆盖onStop并执行那些检查和通知。