2017-08-01 71 views
0

我想創建一個搜索過濾器,它可以從我的來自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靜態? –

回答

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; 
} 
+0

@Roy謝謝,它是爲我的BaseAdapter工作,但對於Recycler查看它不工作。你有任何想法使它在Recycler視圖上工作嗎? – Himadri

+0

請使用您的Recyclerview代碼發佈一個新問題,並將我鏈接到此處。我有一種感覺,這將是一個不同的問題。 –

相關問題