我想制作一个搜索过滤器,可以搜索来自mySQL的联系人列表中的姓名或号码。
我准备了一个适配器,我在其中传递了数组列表中的联系人:
if (books.size() > 1) {
for (int i = 0; i < books.size(); i++) {
if (i != (books.size() - 1)) {
if (!books.get(i).get("contact_name").toString().equals(books.get(i + 1).get("contact_name").toString())) {
UniqueBooks.add(books.get(i));
}
} else {
UniqueBooks.add(books.get(i));
}
}
} else {
UniqueBooks = books;
}
Books = UniqueBooks;
mStringFilterList = UniqueBooks;
并且为了过滤联系人,我已经完成了按名称搜索联系人。
private class ValueFilter extends Filter {
//Invoked in a worker thread to filter the data according to the constraint.
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList> filterList = new ArrayList>();
for (int i = 0; i < mStringFilterList.size(); i++) {
String contactNo = (String) mStringFilterList.get(i).get("contact_name");
contactNo = contactNo.toLowerCase();
constraint = (CharSequence) constraint.toString().toLowerCase();
//System.out.println("contactNo "+contactNo+ " char "+constraint);
if (contactNo.contains(constraint)) {
filterList.add(mStringFilterList.get(i));
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = mStringFilterList.size();
results.values = mStringFilterList;
}
return results;
}
有没有办法按姓名和号码一起过滤联系人?
答案 0 :(得分:1)
您可以将contact_name,contact_no或任何其他查询作为query
传递。
覆盖可能会失败,因此您可以将其作为一个函数。
如果您想按姓名和号码一起过滤联系人,那么您只需要调用该功能两次,如:
valuefilter.filter_result = valuefilter.performFiltering("constraint", "contact_name");
valuefilter.filter_result = valuefilter.performFiltering("constraint", "contact_no");
我无法告诉您如何获得mStringFilterList
。根据我对上面代码的最佳理解,这将最大限度地减少更改代码结构。
FilterResults performFiltering(CharSequence constraint, String query) {
//...
for (int i = 0; i < mStringFilterList.size(); i++) {
String contactNo = (String) mStringFilterList.get(i).get(query);
//...
}
//...
return results;
}