Java 根据Android中另一个首选项的值删除首选项

Java 根据Android中另一个首选项的值删除首选项,java,android,Java,Android,我的问题是关于Android中的动态(共享)偏好。我找了很多,但找不到合适的解决办法 我有一个SwitchPreference,它应该根据其值添加或删除EditTextPreference 因此,我有一个SettingsFragment.java类: XML布局文件如下所示: <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk

我的问题是关于Android中的动态(共享)偏好。我找了很多,但找不到合适的解决办法

我有一个
SwitchPreference
,它应该根据其值添加或删除
EditTextPreference

因此,我有一个SettingsFragment.java类:

XML布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/calc_base">
...
        <SwitchPreference
            android:key="industrial_tax"
            android:title="@string/industrial_tax"
            android:visibility="invisible"/>

        <EditTextPreference
            android:defaultValue="0"
            android:dialogTitle="@string/residence"
            android:inputType="number"
            android:key="residence"
            android:title="@string/residence" />
...
    </PreferenceCategory>

</PreferenceScreen>

...
...
我尝试过调试,但它从未进入if子句,我也不知道为什么

SwitchPreference
不是二进制的吗?我是Android新手,尽量不给你们带来不必要的麻烦,但我真的走到了死胡同。

findReference()
返回一个
首选项
对象(或
null

问题是您正在检查此
首选项
对象与
布尔值
值false之间的相等性。
if
块将永远不会执行

SwitchPreference
具有
isChecked()
方法(继承自
TwoStatePreference
),您可能希望改用该方法:

// get ahold of the SwitchPreference instance
SwitchPreference pref = (SwitchPreference) findPreference("industrial_tax");

// if it's not checked, then remove the corresponding Preference
if (!pref.isChecked()) {
    Log.v(TAG, "If-Schleife");

    Preference residence = findPreference("residence");
    getPreferenceScreen().removePreference(residence);
}
此外,如果您只想禁用
首选项而不是删除它,那么使用该属性可能是一种更简单/更干净的方法:

<SwitchPreference
    android:key="industrial_tax"
    android:title="@string/industrial_tax"
    android:visibility="invisible"/>

<EditTextPreference
    android:defaultValue="0"
    android:dependency="industrial_tax"
    android:dialogTitle="@string/residence"
    android:inputType="number"
    android:key="residence"
    android:title="@string/residence" />

<SwitchPreference
    android:key="industrial_tax"
    android:title="@string/industrial_tax"
    android:visibility="invisible"/>

<EditTextPreference
    android:defaultValue="0"
    android:dependency="industrial_tax"
    android:dialogTitle="@string/residence"
    android:inputType="number"
    android:key="residence"
    android:title="@string/residence" />