在我的偏好设置用户界面中,我需要根据特定条件隐藏偏好设置。
public class MyFragment extends PreferenceFragment {
public void onCreate(Bundle state) {
addPreferencesFromResource(...);
ListPreference myList = (ListPreference) findPreference("myid");
...
if (condition) {
// hide myList
}
}
}
我似乎无法在ListPreference或PreferenceFragment上找到任何方法来隐藏它在UI中显示。如果你能指出我正确的方向,我将不胜感激。
答案 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);
当首选项被禁用时,第一个将使首选项的后备视图消失,第二个将实际禁用首选项。