隐藏Android首选项菜单中的项目



我的应用程序有一个"首选项"菜单。有两个复选框:"启用音乐"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()似乎什么都不会做。

最新更新