Android的MultiSelectList preference取消选中不火共享preferenceChanged [英] Android MultiSelectListPreference uncheck does not fire SharedPreferenceChanged
问题描述
我使用的是 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屋!