首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwitchPreference以编程方式创建,setChecked无法工作

SwitchPreference以编程方式创建,setChecked无法工作
EN

Stack Overflow用户
提问于 2017-03-22 12:23:23
回答 2查看 2.6K关注 0票数 1

我也想

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

1和3可以正常工作,但在3之后没有检查SwitchPreference,点击按钮也没有任何效果(不能“打开”/检查)。

这是我的PreferenceFragment

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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?

测试项目是论吉乌布

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-22 12:53:45

没有检查SwitchPreference,点击按钮也没有任何效果。

它是在我的机器上检查的。关于国家,点击它后,你是完全正确的。这是因为您要从false回调返回onPreferenceChange()

onPreferenceChange()文档

返回:使用新值更新首选项状态的true

因此,我只将false更改为true,并按预期工作。

编辑

我在运行API 25平板仿真器。然后在API 22仿真器上运行,但没有工作。很奇怪,它只在API 25上按预期运行。

票数 1
EN

Stack Overflow用户

发布于 2021-03-10 04:45:06

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42951557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档