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

问题描述:

我想创建一个搜索过滤器,它可以从我的来自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

是的,如果(contactNo.contains(约束))到如果(contactNo.contains(约束)||(contactName.contains(约束)),希望这有助于 – Nisarg

+0

你为什么不执行更改此行在内容提供具体的方法做工作,为您和给定的选择arguements查询数据库? –

+0

是mStringFilterList静态? –

您可以将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; 
} 
+0

@Roy谢谢,它是为我的BaseAdapter工作,但对于Recycler查看它不工作。你有任何想法使它在Recycler视图上工作吗? – Himadri

+0

请使用您的Recyclerview代码发布一个新问题,并将我链接到此处。我有一种感觉,这将是一个不同的问题。 –