Android的MultiSelectList preference取消选中不火共享preferenceChanged [英] Android MultiSelectListPreference uncheck does not fire SharedPreferenceChanged

查看:922
本文介绍了Android的MultiSelectList preference取消选中不火共享preferenceChanged的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是 MultiSelectList preference 具有以下属性。

I'm using a MultiSelectListPreference with the following properties..

<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"
 />   

在preferences是一个静态的内部 preferenceFragment ,一个共同的活动里面。我米注册和注销的侦​​听器上的的onPause 共享preferenceChanged 事件> onResume 的 preferenceFragment

The preferences are inside a static PreferenceFragment, inside a common Activity. I m registering and unregistering the listener for the SharedPreferenceChanged event on the onPause and onResume of the PreferenceFragment.

code节选:

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);    
        }
    }

}

当我检查的选项,事件触发每次的直到我开始取消选中它们。然后监听停止获取调用。任何想法我米在这里失踪?这是否有不便的与我使用的片段/活动的方式?

When i check an option, the event fires everytime until I start unchecking them.. Then the listener stops getting called. Any ideas what I m missing here? Does this have smth to the with the way i use the Fragment / Activity ?

注:我还要补充一点,我有一个列表preference它继续即使在MultiSelectList $ P $粉煤工作停止响应正常

NOTE: I should also add that I have a ListPreference which continues to work even after the MultiSelectListPref stops responding properly.

推荐答案

我处理同样的问题。 从SDK 18所有的事情似乎工作正常,但在休息,我有同样的问题,像你这样的。

I am dealing with the same issue. From SDK 18 all thing seems to work fine but in rest, I have same issue like you.

我找到了一个解决方案,似乎为我工作:

I found a solution that seems to work for me:

    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;
            }
        });
    }

也许是太为你的情况下非常有用

maybe it is useful for your cases too

这篇关于Android的MultiSelectList preference取消选中不火共享preferenceChanged的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆