2012-02-21 35 views
0

我的應用程序有一個首選項菜單。有2個複選框:「啓用音樂」和「顯示提示」。我想要的是,如果選中「啓用音樂」,音樂列表將顯示,否則音樂列表將不會啓用。我的代碼是:在Android偏好設置菜單中隱藏項目

boolean OPT_MUSIC_DEF = true; 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 
     if (!PreferenceManager.getDefaultSharedPreferences(this).getBoolean(OPT_MUSIC, OPT_MUSIC_DEF)){ 
       Preference list = findPreference("music_list"); 
       list.setEnabled(false); 
     } 
} 

沒有錯誤,但工作不正確。當我檢查「啓用音樂」音樂列表沒有馬上隱藏時,我必須返回並再次進入菜單才能看到音樂列表已隱藏。 取消選中「啓用音樂」項目後,如何使其隱藏? 感謝您的幫助!

回答

3

有內置的功能,可以完成您想要做的事情。在您的preferencess.xml文件中,將music_list首選項的依賴關係設置爲取決於music_enable首選項。

例如:

<android.preference.CheckBoxPreference 
     android:key="music_enable" 
     android:defaultValue="false" 
     android:title="Enable Music" 
     /> 

    <android.preference.ListPreference 
     android:key="music_list" 
     ... 
     android:dependency="music_enable" 
     /> 

每當用戶檢查「music_enable」複選框「music_list」將被啓用。當他們取消選中「music_enable」複選框時,「music_list」將被禁用。

0

如果要強制刷新自己的喜好的外觀,只是做:

Preference myPref = findPreference("mypref"); 
myPref.setDefaultValue((int)(Math.random()*1000); // you can also backup the value before and reset it after if you need to keep a default value 

不是完美的解決方案,但它必將迫使Android的刷新自己的喜好。

順便說一句,我試過Paul-Jan的解決方案,但不幸的是它沒有工作,似乎onContentChanged()將不做任何改變,如果沒有價值。