我的应用程序有一个"首选项"菜单。有两个复选框:"启用音乐"one_answers"显示提示"。我想要的是,如果选中"启用音乐",则会显示音乐列表,否则音乐列表将不启用。我的代码是:
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);
}
}
没有错误,但工作不正确。当我取消选中"启用音乐"音乐列表没有立即隐藏时,我必须返回并再次转到菜单才能看到音乐列表被隐藏。有什么方法可以在取消选中"启用音乐"项目后直接隐藏它?谢谢你帮我!
有一个内置的功能,可以准确地执行您想要执行的操作。在preference.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"将被禁用。
确保在禁用首选项后立即调用onContentChanged()。
如果您想强制刷新首选项的外观,只需执行:
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
这不是一个完美的解决方案,但它肯定会迫使安卓系统刷新你的偏好。
顺便说一句,我尝试了Paul Jan的解决方案,但不幸的是,它没有起作用,如果不更改值,onContentChanged()似乎什么都不会做。