2011-07-20 11 views
2

ネストされた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(スレッドはよく分からないので、私は、ちょうど予防策としてハンドラにそれを置く)がから呼び出されます。

関連する問題