2009-12-12 34 views
2

我有一個ListView,它在PreferenceScreen中設置了一些較小的視覺偏好。這些首選項是簡單的布爾值來顯示或不顯示ListView中每個項目上的某些特定的TextView。無論如何,當這些首選項發生更改時,我需要通知我的ArrayAdapter數據已更改以重新繪製列表。但是,通過OnSharedPreferenceChangeListener執行此操作並不是最佳選擇,因爲您可以更改多個首選項,這會導致對ArrayAdapter進行不必要的更新。所以,對於這個問題:關閉PreferenceActivity後,如何確定ListActivity何時出現在屏幕上,然後我可以使用它檢查首選項中的更改,然後才通知ArrayAdapter。關閉PreferenceActivity時通知ArrayAdapter更改

編輯: ArrayAdapter是我的ListActivity的內部類,它被設置爲ListAdapter。

回答

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); 
    

您還必須實現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 
     } 
    } 
0

PreferenceActivity擴展了Activity,因此您可以重寫onStop並在那裏執行這些檢查和通知。