2011-07-20 16 views
2

我有一個PreferenceScreen嵌套PreferenceScreen的PreferencesActivity,因此PreferenceScreen在首選項列表中有自己的行,當您單擊它時,會出現幾個選項。從嵌套PreferenceScreen返回時更改彙總

當用戶更改其中一個選項時,我更新該選項的摘要以顯示用戶選擇的內容。

我也想更改主列表上的PreferenceScreen的摘要以顯示其子設置的值。我正在使用OnSharedPreferenceChangeListener同時更新這兩個摘要。但是,只有首選項的摘要纔會更改,而不是首選項屏幕的摘要。

這裏被簡化代碼:

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    if (key.equals(SUB_PREFERENCE)){ 
     updateSubPreferenceSummary(); //works 
     updatePreferenceScreenSummary(); //doesn't work 
    } else if (key.equals(SOME_OTHER_PREF_IN_ROOT_OF_PREFERENCEACTIVITY) { 
     updatePreferenceScreenSummary(); //works. (not what I want--just illustrating issue) 
    } 
} 

我的理論是,Android是忽略第一個畫面時是不可見的,因此它不會得到更新。我試着重寫onBackPressed(),但那也不起作用。

回答

1

我找到了解決辦法。顯然,摘要正在更新,但來自父屏幕的視圖並未失效/重繪。

所以我做這個更新後總結:

mHandler.post(new Runnable(){ 
      public void run(){onContentChanged(); 
     }}); 

我把它放在處理程序只是作爲一項預防措施,因爲我不知道什麼線程的onSharedPreferenceChanged()獲取調用。