2015-10-22 75 views
0

未顯示的自動完成框下拉提示包含其顯示的StartWith。如何顯示自動完成文本框的建議包含?

這是我的代碼

final ArrayList<String> listFilterJob = new ArrayList<>(); 
    listFilterJob.add("Anuj"); 
    listFilterJob.add("Akshay"); 
    listFilterJob.add("Ananta"); 
    listFilterJob.add("Muskan"); 
    listFilterJob.add("sachin"); 

    ArrayAdapter adapterFiltersJob = new ArrayAdapter(this, android.R.layout.simple_list_item_1, listFilterJob); 
    edtFilterJob.setThreshold(1); 
    edtFilterJob.setDropDownWidth(350); 
    edtFilterJob.setAdapter(adapterFiltersJob); 

當我輸入「的」自動完成文本框的顯示結果 UJ和安踏在下拉列表中,但我想 UJ,安踏和麝香。 我該如何做到這一點,幫助我。

回答

3

您需要擴展實現FilterableArrayAdapter。 檢查這太問題和答案:Filtering AutoCompleteTextView to show partial match

所以,你的解決方案將是(問題和答案的組合):

public class CodesArrayAdapter extends ArrayAdapter implements Filterable{ 

    List<String> allCodes; 
    List<String> originalCodes; 
    StringFilter filter; 

    public CodesArrayAdapter(Context context, int resource, List<String> keys) { 
     super(context, resource, keys); 
     allCodes=keys; 
     originalCodes=keys; 
    } 

    public int getCount() { 
     return allCodes.size(); 
    } 

    public Object getItem(int position) { 
     return allCodes.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    private class StringFilter extends Filter { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 

      String filterString = constraint.toString().toLowerCase(); 
      FilterResults results = new FilterResults(); 
      final List<String> list = originalCodes; 

      int count = list.size(); 
      final ArrayList<String> nlist = new ArrayList<String>(count); 
      String filterableString ; 

      for (int i = 0; i < count; i++) { 
       filterableString = list.get(i); 
       if (filterableString.toLowerCase().contains(filterString)) { 
        nlist.add(filterableString); 
       } 
      } 

      results.values = nlist; 
      results.count = nlist.size(); 
      return results; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      allCodes = (ArrayList<String>) results.values; 
      notifyDataSetChanged(); 
     } 

    } 


    @Override 
    public Filter getFilter() 
    { 
     return new StringFilter(); 
    } 
} 
+0

我如何能實現此代碼,以我的代碼.... –

+0

添加它作爲單獨的類文件並使用'CodesArrayAdapter'而不是'ArrayAdapter'。 –

+0

它的工作原理是在edittext大小爲0時給出NullPointerException –

相關問題