Android - 如何在PreferenceFragment中隐藏控件

时间:2014-01-31 01:08:14

标签: android

在我的偏好设置用户界面中,我需要根据特定条件隐藏偏好设置。

public class MyFragment extends PreferenceFragment {
  public void onCreate(Bundle state) {
    addPreferencesFromResource(...);
    ListPreference myList = (ListPreference) findPreference("myid");

    ...
    if (condition) {
      // hide myList
    }
 }

}

我似乎无法在ListPreference或PreferenceFragment上找到任何方法来隐藏它在UI中显示。如果你能指出我正确的方向,我将不胜感激。

3 个答案:

答案 0 :(得分:11)

经过多次调试后,结果非常简单。以下是您需要做的事情:

首先,获取项目所属的PreferenceCategory。接下来,只需在其上调用removePreference。

 PreferenceCategory myCategory = (PreferenceCategory) findPreference("myPrefCategory");
 myCategory.removePreference(myList);

答案 1 :(得分:2)

对于那些想知道如何删除没有父类别的项目的人 - 你应该像这样命名你的根:

<PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:key="root_preferences">
<PreferenceCategory
        android:title="Developer tools"
        android:key="dev_tools_category">

然后例如:

if (!BuildConfig.DEBUG) {
    PreferenceScreen rootPreferences = (PreferenceScreen) findPreference("root_preferences");
    PreferenceCategory devCategory = (PreferenceCategory) findPreference("dev_tools_category");
    rootPreferences.removePreference(devCategory);
}

在上面的示例中,“dev_tools_category”可以是任何首选项小部件或类似我展示的 - 类别。

答案 2 :(得分:0)

您可以使用Preference超类中的继承方法。

myList.setShouldDisableView(true);
myList.setEnabled(false);

当首选项被禁用时,第一个将使首选项的后备视图消失,第二个将实际禁用首选项。