使用联系人姓名和号码搜索过滤器

时间:2017-08-01 04:19:46

标签: android

我想制作一个搜索过滤器,可以搜索来自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;
}

有没有办法按姓名和号码一起过滤联系人?

1 个答案:

答案 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;
}