我的应用程序有一个首选项菜单。有2个复选框:“启用音乐”和“显示提示”。我想要的是,如果选中“启用音乐”,则会显示音乐列表,否则音乐列表将无法启用。我的代码是:
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);
}
}
没有错误,但工作不正确。当我取消选中“启用音乐”音乐列表没有立即隐藏时,我必须返回并再次进入菜单才能看到音乐列表被隐藏。 取消选中“启用音乐”项后,是否可以直接隐藏它? 谢谢你的帮助!
答案 0 :(得分:3)
内置功能可以完全按照您的要求进行操作。在 preferences.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”将被禁用。
答案 1 :(得分:0)
请务必在停用首选项后立即致电onContentChanged()。
答案 2 :(得分: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()如果没有改变值就不会做任何事情。