2012-02-21 70 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()将不做任何改变,如果没有价值。