1

我想要

  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>

如何正确setChecked(true)使用以编程方式创建的 SwitchPreference?

测试项目在 Github 上

4

2 回答 2

1

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

它在我的机器上进行了检查。关于点击后的状态,你是完全正确的。那是因为你是falseonPreferenceChange()回调中返回的。

文档onPreferenceChange()

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

所以,我只改变falsetrue它,它按预期工作。

编辑

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

于 2017-03-22T12:53:45.980 回答
0

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

于 2021-03-10T04:45:06.453 回答