就像标题说的那样,我得到了一个我想要使用过滤器的列表,其中包含 7 个选项。
如果我想将所有这些选项放在一个案例中,我会看到 7*6*5*4*3*2*1 意味着 5040 种可能性。正确的?
那么我怎样才能做到这一点,它不是这么大的 switch 语句?
我在 google 上查看过,但找不到任何解决方案。比如:android多选项案例,android过滤器搜索listview
就像标题说的那样,我得到了一个我想要使用过滤器的列表,其中包含 7 个选项。
如果我想将所有这些选项放在一个案例中,我会看到 7*6*5*4*3*2*1 意味着 5040 种可能性。正确的?
那么我怎样才能做到这一点,它不是这么大的 switch 语句?
我在 google 上查看过,但找不到任何解决方案。比如:android多选项案例,android过滤器搜索listview
您希望将每个选项依次应用于您获得的过滤列表。因此,如果第一个选项打开,则获取已被选项 1 过滤的新列表。然后,如果第二个选项打开,则使用选项 2 过滤选项 1 中的过滤列表。依此类推。
您最终会得到 7 个 if(每个选项 1 个),您应该继续过滤您返回的列表。
试试这个方法:扩展过滤器:
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
modelValues = (ArrayList<String>) results.values; // has
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<Model> FilteredArrList = new ArrayList<Model>();
if (mOriginalValues == null) {
mOriginalValues = new ArrayList<Model>(modelValues); // saves
}
/********
*
* If constraint(CharSequence that is received) is null returns
* the mOriginalValues(Original) values else does the Filtering
* and returns FilteredArrList(Filtered)
*
********/
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = mOriginalValues.size();
results.values = mOriginalValues;
} else {
Locale locale = Locale.getDefault();
constraint = constraint.toString().toLowerCase(locale);
for (String model : mOriginalValues) {
String data =model;
if (data.toLowerCase(locale).contains("7".toString())||data.toLowerCase(locale).contains("6".toString())||data.toLowerCase(locale).contains("5".toString())||data.toLowerCase(locale).contains("4".toString())) {
FilteredArrList.add(modelMyMall);
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
使用这种方式:
List<String> list = new ArrayList<String>(Arrays.asList(new String[]
{"7", "6","3", "5"})); //7*6*5*$*3*2*1
System.out.println("List Before: " + list);
for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
}
System.out.println("List After: " + list);
如果它不符合标记不需要检查其他选项,您可以简单地检查第一个选项,而不是为每个选项制作一个 switch 语句。同样,如果第一个选项满足条件,它将不会检查您的第一个选项,如果它没有满足条件,则转到第二个选项,则无需检查其余选项,依此类推...