<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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)