我有一个带有MultiSelectListPreference的Android应用程序,我正在使用onPreferenceChange()方法来更新Preference的摘要.我已经设法编写了基于newValues参数更新摘要的代码,但是Object的内容与用户选择的实际选项不匹配.
这是我的代码:
public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference instanceof MultiSelectListPreference) { List<String> newValues = new ArrayList<>((HashSet<String>) newValue); MultiSelectListPreference pref = (MultiSelectListPreference) preference; ArrayList<String> newSummary = new ArrayList<>(); ArrayList<CharSequence> values = new ArrayList<>(Arrays.asList(pref.getEntryValues())); for (int i = 0; i < newValues.size(); i++) { int currentIndex = findindexOfString(values, newValues.get(i).replaceAll(" ", "")); String Title = (currentIndex >= 0) ? pref.getEntrIEs()[currentIndex].toString().replaceAll(" ", "") : ""; newSummary.add(Title); } pref.setSummary(TextUtils.join(", ", newSummary)); } return true;}private static int findindexOfString(List<CharSequence> List, String s) { for (int i = 0; i < List.size(); i++) { if (s.equals(List.get(i).toString().replaceAll(" ", ""))) { return i; } } return -1;}
解决方法:
这是我用于根据从onPreferenceChange()接收的newValue对象设置摘要的代码,其中包含存储为首选项的值. (对摘要不好)
public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference instanceof MultiSelectListPreference) { List<String> newValues = new ArrayList<>((HashSet<String>) newValue); pref.setSummary(TextUtils.join(", ", getSummaryListFromValueList(newValues))); } return true;}private List<String> getSummaryListFromValueList(List<String> valueList) { String[] allSummarIEs = getResources().getStringArray(R.array.pref_notif); String[] allValues = getResources().getStringArray(R.array.pref_notif_values); List<String> summaryList = new ArrayList<>(); for (int i = 0; i < allValues.length; i++) { for (String value : valueList) { if (allValues[i].equals(value)) { summaryList.add(allSummarIEs[i]); } } } return summaryList; }
总结 以上是内存溢出为你收集整理的android – MultiSelectListPreference onPreferenceChange()方法得到错误的参数全部内容,希望文章能够帮你解决android – MultiSelectListPreference onPreferenceChange()方法得到错误的参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)