在Android偏好设置菜单中隐藏项目

时间:2012-02-21 18:26:49

标签: android android-layout android-intent

我的应用程序有一个首选项菜单。有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);
         }
}

没有错误,但工作不正确。当我取消选中“启用音乐”音乐列表没有立即隐藏时,我必须返回并再次进入菜单才能看到音乐列表被隐藏。 取消选中“启用音乐”项后,是否可以直接隐藏它? 谢谢你的帮助!

3 个答案:

答案 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()如果没有改变值就不会做任何事情。