【问题标题】:SwitchPreference create programmatically, setChecked not workingSwitchPreference 以编程方式创建,setChecked 不起作用
【发布时间】:2017-03-22 12:23:23
【问题描述】:

我想要

  1. 以编程方式创建SwitchPreference
  2. 设置setChecked(true)就可以了
  3. 将其添加到PreferenceGroup

1 和 3 工作正常,但在 3 之后,SwitchPreference 未被选中,并且单击切换无效(无法“打开”/选中)。

这是我的PreferenceFragment

public class MyPrefFragment extends PreferenceFragment {
    @Override
    public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {

        addPreferencesFromResource(R.xml.prefs);

        PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_cat_1");

        SwitchPreference switchPreference = new SwitchPreference(getActivity());
        switchPreference.setTitle("new");
        switchPreference.setChecked(true);
        switchPreference.setDefaultValue(true);

        switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(final Preference preference, final Object newValue) {

                Toast.makeText(getActivity(), newValue.toString(), Toast.LENGTH_SHORT).show();

                return false;
            }
        });

        preferenceGroup.addPreference(switchPreference);

    }
}

还有我的PreferenceScreen

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="cat_one">

        <SwitchPreference
            android:key="pref_1"
            android:defaultValue="false"
            android:title="fest"/>

    </PreferenceCategory>

    <PreferenceCategory
        android:key="pref_cat_1"
        android:title="category"/>

</PreferenceScreen>

如何在以编程方式创建的 SwitchPreference 上正确地setChecked(true)

测试项目是on Github

【问题讨论】:

  • 我遇到了同样的问题......在 PreferenceCategory 上调用 addPreference 已经有一个 SwitchPreference 给我带来了问题......我的解决方法是将代码重构为不要使用addPreference

标签: android android-support-library android-preferences android-preference-v14


【解决方案1】:

SwitchPreference 未选中,点击切换无效。

在我的机器上检查过。关于点击后的状态,你是完全正确的。那是因为您从 onPreferenceChange() 回调返回 false

onPreferenceChange()的文档:

返回:true 以使用新值更新 Preference 的状态。

所以,我只将false 更改为true,它按预期工作。

编辑

我正在运行 API 25 平板电脑模拟器。然后在 API 22 模拟器上运行,它没有工作。很奇怪,它只在 API 25 上按预期运行。

【讨论】:

  • @Ascorbin 你有没有最终让这个在较低的 API 级别上工作?
  • @ForrestBice 不。
【解决方案2】:

我在使用addPreference() 时遇到了同样的问题,但我切换到preferenceGroup.addItemFromInflater(switchPreference) 并且效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多