android - PreferenceCategory.removePreference() 返回 false,因此不会删除首选项

标签 android android-preferences preferenceactivity preferencefragment

我已经在 SO 上看到了与此问题相关的所有问题,但没有一个对我有用。我正在尝试删除从 PreferenceFragment 类中的 xml 文件加载的首选项,但它不会删除该首选项。

这是我的pref_screen.xml 文件

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

    <PreferenceCategory>

    <! ------------ />

    <Preferencecategory>

    <PreferenceCategory
         android:key="device_section">

        <Preference 
            android:key="sound"
            android:icon="@drawable/ic_settings_icon"
            android:title="@string/sound">
        </Preference>

        <Preference
            android:key="storage_settings"
            android:title="@string/storage_settings"
            android:icon="@drawable/ic_settings_storage">
        <Preference>

    </PreferenceCategory>

    <PreferenceCategory>

    <! ------------------ />

    </PreferenceCategory>

</PreferenceScreen>

这是我的PreferenceFragment 类:

public static class PrefFragment extends PreferenceFragment {

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_screen);

        final Preference storage = getPreferenceScreen().findPreference("storage_settings");

        if(storage != null){
            Log.d("SettingsActivity : ", "findPreference(storage_settings) not returning null.");
        }

        final PreferenceCategory device_prefCat = 
            (PreferenceCategory) getPreferenceScreen().findPreference("device_section");

        if(device_prefCat != null){
            Log.d("SettingsActivity : " , "findPreference(device_section) not returning null.");
        }


        if(device_prefCat.removePreference(storage)){
            Log.d("SettingsActivity : ", "device_prefCat() returns true.");
        }else{
            Log.d("SettingsActivity : ", "device_prefCat() returns false");
        }
    }

我检查了日志。 findPreference() 未返回 null,但 removePreference() 返回 false。请告诉我我做错了什么。

最佳答案

基于我在 this thread 中发现的内容以下应该适合你:

Preference storage = findPreference("storage_settings");
PreferenceCategory device_prefCat = (PreferenceCategory) findPreference("device_section");
device_prefCat.removePreference(storage)

请注意,我不是在这里故意使用getPreferenceScreen()

关于android - PreferenceCategory.removePreference() 返回 false,因此不会删除首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834416/

相关文章:

android - PreferenceActivity 中的 Toast 显示较晚

Android 偏好添加不需要的字符

Android:如何在首选项屏幕中使用按钮

android - MPAndroidChart:如何反转 Horizo​​ntalBarChart 的顺序?

android - 两列,其中一列分为两行 - Android

找不到 Androidx SeekBarPreference xml 属性 setMax

Android SDK 使用 PreferenceActivity 添加设置

android - 无法访问 PreferenceActivity 创建的首选项

android - 从具有按钮的 ListView 获取列表项的位置

android - Activity 启动或创建时如何触发 swipeRefreshLayout 指示器