android–CheckBoxPreference .isChecked()返回相反的值

android–CheckBoxPreference .isChecked()返回相反的值,第1张

概述我正在尝试使用片段构建我的PreferenceActivity.我有一个包含两个CheckBoxPreferences的PreferenceFragment:<CheckBoxPreferenceandroid:key="pref_bfp_scale"android:title="@string/PREF_BFP_scale_title"android:defaultValue="false"/>

我正在尝试使用片段构建我的PreferenceActivity.我有一个包含两个CheckBoxPreferences的PreferenceFragment:

<CheckBoxPreference    androID:key="pref_bfp_scale"    androID:title="@string/PREF_BFP_scale_Title"    androID:defaultValue="false" /><CheckBoxPreference    androID:key="pref_bfp_navy"    androID:title="@string/PREF_BFP_navy_Title"    androID:defaultValue="true" />

我的FragmentSettingsActivity:

public class FragmentSettingsActivity extends PreferenceActivity {    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    public static class BodyFatPreferenceFragment extends PreferenceFragment {        @OverrIDe        public voID onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            addPreferencesFromresource(R.xml.pref_body_fat);            bindPrefSumtovalListener(findPreference("pref_bfp_scale"), "Boolean");            bindPrefSumtovalListener(findPreference("pref_bfp_navy"), "Boolean");        }    }    private static Preference.OnPreferencechangelistener prefSumtovalListener = new Preference.OnPreferencechangelistener() {        @OverrIDe        public boolean onPreferenceChange(Preference preference, Object value) {            String stringValue = value.toString();            log("Pref changed - Value: " + stringValue);            if (preference instanceof CheckBoxPreference) {                Map<String, Integer> checkBoxes = new HashMap<String, Integer>();                checkBoxes.put("pref_bfp_navy_unchecked", R.string.PREF_BFP_navy_summary_unchecked);                checkBoxes.put("pref_bfp_navy_checked", R.string.PREF_BFP_navy_summary_checked);                checkBoxes.put("pref_bfp_scale_unchecked", R.string.PREF_BFP_scale_summary_unchecked);                checkBoxes.put("pref_bfp_scale_checked", R.string.PREF_BFP_scale_summary_checked);                log(Boolean.toString(((CheckBoxPreference) preference).isChecked()));                log(String.format("? : %s_%s", preference.getKey(), ((CheckBoxPreference) preference).isChecked()? "checked" : "unchecked"));                preference.setSummary(checkBoxes.get(String.format("%s_%s", preference.getKey(), ((CheckBoxPreference) preference).isChecked()? "checked" : "unchecked")));            }            return true;        }    };    private static voID bindPrefSumtovalListener(Preference preference, String type) {        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(preference.getContext());        preference.setonPreferencechangelistener(prefSumtovalListener);        if (type.equals("Boolean")) {            prefSumtovalListener.onPreferenceChange(preference, sharedPreferences.getBoolean(preference.getKey(), false));        }    }}

onPreferenceChange的第一次调用正确设置摘要,但每隔一个调用设置相反的摘要:如果选中Box,则设置“未选中”摘要,反之亦然.

似乎isChecked()返回某种错误的值,因为value.toString()以String形式返回正确的状态.

log()打印:

log("Pref changed - Value: " + stringValue);    //Output: Pref changed - Value: truelog(Boolean.toString(((CheckBoxPreference) preference).isChecked()));    //Output: falselog(String.format("? : %s_%s", preference.getKey(), ((CheckBoxPreference) preference).isChecked()? "checked" : "unchecked"));    //Output: ? : pref_bfp_navy_unchecked

我的错误在哪里?

解决方法:

来自OnPreferenceChangeListener文档:

Returns
True to update the state of the Preference with the new value.

可以从中收集的是,在侦听器返回true之前,首选项的值实际上不会发生变化.换句话说,onPreferenceChange()的newValue参数是该值的值,但不是它当前的值(因为在返回true之前,您的日志检查在侦听器内部).

在旁注中,我认为这样做的目的是使您能够拒绝对首选项的无效更改.例如,如果首选项是一个字符串,并且希望它只接受来自某个可接受值数组的字符串,则dev可以通过在onPreferenceChange()中返回false来拒绝该更改.

总结

以上是内存溢出为你收集整理的android – CheckBoxPreference .isChecked()返回相反的值全部内容,希望文章能够帮你解决android – CheckBoxPreference .isChecked()返回相反的值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110386.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存