Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged

Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged,第1张

概述我正在使用具有以下属性的 MultiSelectListPreference .. <MultiSelectListPreference android:key="shop_list" android:entries="@array/shop_titles" android:entryValues="@array/shop_values" 我正在使用具有以下属性的 MultiSelectListPreference ..

<MultiSelectListPreference         androID:key="shop_List"                androID:entrIEs="@array/shop_Titles" androID:entryValues="@array/shop_values"     androID:title="@string/pref_Title_shops"        androID:dialogtitle="@string/pref_Title_shops"  androID:defaultValue="@array/shop_values" androID:summary="Choose where you hunt" />

首选项位于公共活动内部的静态PreferenceFragment内.我在PreferenceFragment的onPause和onResume上注册和取消注册SharedPreferenceChanged事件的监听器.

代码摘录:

public class AgentSettingsActivity extends Activity{    @OverrIDe    protected voID onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        getFragmentManager().beginTransaction().replace(androID.R.ID.content,new SettingsFragment()).commit();    }    public static class SettingsFragment extends PreferenceFragment implements OnSharedPreferencechangelistener    {        @OverrIDe        public voID onCreate(Bundle savedInstanceState)        {            super.onCreate(savedInstanceState);            Utils.Log("onCreate");            // Load the preferences from an XML resource            addPreferencesFromresource(R.xml.pref_general);        }        @OverrIDe        public voID onResume()        {            Utils.Log("onResume");                    super.onResume();            try            {                Utils.Log("Add pref Listeners and try set summary");               getPreferenceScreen().getSharedPreferences().registerOnSharedPreferencechangelistener(this);            }            catch (Exception e)            {                Utils.Log("Pref not found");            }        }        @OverrIDe        public voID onPause()        {            super.onPause();            Utils.Log("onPause");            // Unregister the Listener whenever a key changes            getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferencechangelistener(this);        }        @OverrIDe        public voID onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)        {            Utils.Log("onPreferenceChange,key : " + key);            }    }}

当我检查一个选项时,事件每次都会触发,直到我开始取消选中它们.然后,监听器停止被调用.我在这里缺少什么想法?这与我使用片段/活动的方式有关吗?

注意:我还应该补充说,我有一个ListPreference,即使在MultiSelectListPref正确停止响应之后仍然可以继续工作.

解决方法 我正在处理同样的问题.
从SDK 18开始,所有事情似乎都很好但在休息时,我和你一样有同样的问题.

我找到了一个似乎对我有用的解决方案:

MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("pref_name");    if (multiSelectListPref != null) {        multiSelectListPref.setonPreferencechangelistener(new Preference.OnPreferencechangelistener() {            @OverrIDe            public boolean onPreferenceChange(Preference preference,Object newValue) {                MultiSelectListPreference mpreference = (MultiSelectListPreference) preference;                mpreference.setSummary(newValue.toString());                mpreference.setValues((Set<String>) newValue);                return true;            }        });    }

也许它对你的情况也很有用

总结

以上是内存溢出为你收集整理的Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged全部内容,希望文章能够帮你解决Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存