2011-03-31 35 views
1

我有一個PreferenceScreen在一個XML文件中定義是這樣的:setSummary(TXT)

<PreferenceCategory android:title="Choose Days"> 
    <PreferenceScreen android:title="Days of Week" android:key="daysOfWeek"> 
     <CheckBoxPreference android:title="Mondays" android:key="chkMonday"></CheckBoxPreference> 
     <CheckBoxPreference android:title="Tuesdays" android:key="chkTuesday"></CheckBoxPreference> 
     <CheckBoxPreference android:title="Wednesdays" android:key="chkWednesday"></CheckBoxPreference> 
     <CheckBoxPreference android:title="Thursdays" android:key="chkThursday"></CheckBoxPreference> 
     <CheckBoxPreference android:title="Fridays" android:key="chkFriday"></CheckBoxPreference> 
     <CheckBoxPreference android:title="Saturdays" android:key="chkSaturday"></CheckBoxPreference> 
     <CheckBoxPreference android:title="Sundays" android:key="chkSunday"></CheckBoxPreference> 
    </PreferenceScreen> 
</PreferenceCategory> 
<PreferenceCategory android:title="Other Settings"> 
    <CheckBoxPreference android:title="Enable" android:defaultValue="true" android:key="enable"></CheckBoxPreference> 
</PreferenceCategory> 

當我點擊PreferenceScreen:daysOfWeek複選框出現,OG,當我選中或取消選中一個框,onSharedPreferenceChanged被觸發。

這是因爲這樣的:

公共類Muteny擴展PreferenceActivity實現OnSharedPreferenceChangeListener {

和註冊的onResume它在我的.java文件註銷它的onPause。

簡化onSharedPreferenceChanged看起來是這樣的:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    PreferenceScreen daysOfWeek = ((PreferenceScreen)findPreference("daysOfWeek")); 
    daysOfWeek.setSummary("text for summary"); 
    Toast.makeText(this.getApplicationContext(), "Hello", Toast.LENGTH_LONG).show(); 
} 

的問題是,「daysOfWeek」的總結永遠不會更新。如果我然後切換CheckBoxPreference「啓用」(此時不做任何事情,但觸發更改),摘要會根據我希望在切換「日期框」時更新。

在敬酒的消息是,雖然顯示...

檢查「天盒」時,如何更新我PreferenceScreen的總結?

回答

3

這個問題經常出現。

以下是您可以查看可能解決方案的其他答案。我從未解決過讓我百分百滿意的解決方案。

PreferenceScreen android:summary update !

Update existing Preference-item in a PreferenceActivity upon returning from a (sub)PreferenceScreen

所有的 「解決方案」 的我見過,似乎工作最好是你setSummary(...)調用之後調用onContentChanged()的一個。對於這樣做是否安全有一些爭議。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 
    if (key.startsWith("chk")) {    
     PreferenceScreen prefscreen = ((PreferenceScreen)findPreference("daysOfWeek")); 
     prefscreen.setSummary(key); 
     onContentChanged(); 
    } 
} 
+0

我試過這些,但似乎無法讓他們工作。 你可以畫一個例子嗎? THX – Smet 2011-03-31 16:27:51

+1

@Smet我用代碼片斷更新了答案,顯示了對onContentChanged()的調用,這似乎是最受歡迎的解決方案。 – slund 2011-03-31 17:46:12

+1

完美! 謝謝! – Smet 2011-03-31 18:39:00