如何以编程方式删除PreferenceCategory?

Har*_*elm 36 android preferences

我需要以编程方式删除PreferenceCategory.我可以使用以下代码删除个人首选项,但我还需要删除(禁用)整个PreferenceCategory.

PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");
((PreferenceGroup) findPreference("prefcat")).removePreference(etp);
Run Code Online (Sandbox Code Playgroud)

编辑:这是PreferenceCategory"prefcat"和子偏好"pref22"的工作代码:

PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");

PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("prefcat");
if (preferenceGroup != null) {
    preferenceGroup.removePreference(etp);
    preferenceScreen.removePreference(preferenceGroup);
}
Run Code Online (Sandbox Code Playgroud)

dou*_*bou 65

你可以通过引用来隐藏一个类别PreferenceScreen:

我是你的xml:

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:key="@string/preferenceScreen">

//set all you values
//Preference, PreferenceCategory and/or CheckBoxPreference

</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

你在string.xml中:别忘了设置这个新字符串

 <string name="preferenceScreen" translatable="false">preferenceScreen</string>
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

preferenceScreen = (PreferenceScreen) findPreference(getResources().getString(R.string.preferenceScreen));
Run Code Online (Sandbox Code Playgroud)

然后从PreferenceScreen中删除该类别:

myCategory = (PreferenceCategory) findPreference(getResources().getString(R.string.my_category));
myPreferenceScreen.removePreference(myCategory);
Run Code Online (Sandbox Code Playgroud)

  • 这个应该选择作为答案. (8认同)

Com*_*are 17

不要PreferenceCategory首先加载.

如果要在Java中定义首选项,请不要创建PreferenceCategory.

如果要在XML中定义首选项,请使用三个XML文件:

  1. 一个在这个神奇类别之前的东西
  2. 一个用于魔术类别
  3. 这个神奇类别后的东西之一

在需要类别的情况下,加载所有三个XML文件.在不需要类别的情况下,仅加载第一个和第三个XML文件.


Mdl*_*dlc 9

为您的PreferenceScreen和XML中的PreferenceCategory提供一个键:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="preferenceScreen" >

  <PreferenceCategory
     android:summary="@string/settings_billing_summary"
     android:title="Title"
     android:key="myPrefCat" >
      <Preference
      android:key="someKey"
      android:summary="Sum"
      android:title="Title" />
   </PreferenceCategory>

</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

在您的课程中,您现在可以引用您的preferenceScreen和preferenceCategory,并使用removePreference()方法从屏幕中删除首选项:

    PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("preferenceScreen");
    PreferenceCategory myPrefCat = (PreferenceCategory) findPreference("myPrefCat");
    preferenceScreen.removePreference(myPrefCat);
Run Code Online (Sandbox Code Playgroud)

这个答案基于douarbou的答案,该答案似乎已经过时,但基本相同.