就像标题所说的那样,我得到了一些我希望使用带有7个选项的过滤器的列表。
如果我想将所有这些选项放在一个案例中,我会看到7 * 6 * 5 * 4 * 3 * 2 * 1意味着5040个可能性。正确?
那么我怎么能这样做呢,这不是一个很大的转换声明?
我在google上看了很多但是找不到任何解决方案。 例如:android multiple options case,android filter search listview
答案 0 :(得分:1)
您希望依次将每个选项应用于您获得的过滤列表。 因此,如果启用第一个选项,请获取已通过选项1过滤的新列表。 然后,如果启用了第二个选项,则使用选项2过滤选项1中的已过滤列表。依此类推。
你最终会得到7个ifs(每个选项1个),你应该继续过滤你得到的列表。
答案 1 :(得分:0)
不是为每个选项创建一个switch语句,而是只检查第一个选项,如果它没有达到标记,则不需要检查其他选项。 Simillarly如果第一个选项满足条件,它将不会检查您的第一个选项,如果没有满足条件,则转到第二个选项,然后无需检查其余选项等等...
答案 2 :(得分:0)
尝试这种方式: 扩展可过滤:
@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;
}
答案 3 :(得分:0)
使用这种方式:
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);