java - 根据Android中另一个Preference的值删除Preference

标签 java android

我的问题是关于 Android 中的动态(共享)首选项。我进行了很多搜索,但找不到合适的解决方案。

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

因此我有一个 SettingsFragment.java 类:

public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

private static final String TAG = "SteuerApp Fragment";

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Einsttelungsseite aus XML-Datei laden
    addPreferencesFromResource(R.xml.preferences);
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Log.v(TAG, "If-Schleife");
    if(findPreference("industrial_tax").equals(false)){
        Log.v(TAG, "If-Schleife");
        Preference residence = findPreference("residence");
        PreferenceScreen preferenceScreen = getPreferenceScreen();
        preferenceScreen.removePreference(residence);
    }


}

@Override
public void onResume() {
    super.onResume();
    getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); //register SharedPreference
}

@Override
public void onPause() {
    getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); //unregister SharedPreference
    super.onPause();
}
}

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 的新手,尽量不要不必要地打扰你们,但我真的走投无路了。

最佳答案

findPreference() 返回一个 Preference 对象(或 null)。

问题是您正在检查此 Preference 对象和 booleanfalse 之间的相等性。 if block 永远不会被执行。

SwitchPreferenceisChecked() 方法(继承自 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);
}

此外,如果您可以只禁用 Preference 而不是删除它,那么使用 android:dependency属性可能是一种更简单/更清晰的方法:

<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" />

关于java - 根据Android中另一个Preference的值删除Preference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50007105/

相关文章:

java - eclipse : Could not open editor after Eclipse PDT upgrade to version 5. 0.1.201706221952

java - 如何将错误或异常写入以日期命名的日志文件中?

java - 处理 Buffer 内多条消息的异常 [JAVA-Mina]

Android:不幸的是onClick停止了

android - 从服务更新 UI

android - 如何在 Android 中设置搜索栏值?

java - CheckStyle - 重写方法的 JavaDoc

java - 在 DispatcherServlet 中未找到名称为 'offers' 的 URI [/offers/] 的 HTTP 请求的映射

android - 未触发的未决 Intent

android - 如何用android :digits and android:imeOptions ="actionDone" work properly in Android制作xml