2014-09-22 46 views
0

我已經實現FilterableAutoCompleteTextView機器人:沒有什麼自動完成結果顯示出來

public class IdiomAdapter extends BaseAdapter implements Filterable{ 

    Context context; 
    List<Idiom> idioms; 

    public IdiomAdapter(Context context, List<Idiom> idioms){ 
     this.context = context; 
     this.idioms = idioms; 
     originaList = new ArrayList<Idiom>(idioms); 
     filter = new IdiomFilter(); 
    } 

    @Override 
    public int getCount() { 
     if (idioms != null) { 
      return idioms.size(); 
     }else{ 
      return 0; 
     } 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return idioms.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 
     return idioms.get(arg0).getId(); 
    } 



    @Override 
    public Filter getFilter() { 
     return filter; 
    } 

    private IdiomFilter filter; 
    ArrayList<Idiom> originaList; 

    public class IdiomFilter extends Filter { 

     public IdiomFilter(){ 

     } 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults oReturn = new FilterResults(); 
      ArrayList<Idiom> result = new ArrayList<Idiom>(); 
      if (originaList == null) { 
       originaList = (ArrayList<Idiom>) idioms; 
      } 

      if (constraint !=null) { 
       if (originaList !=null && originaList.size() > 0) { 
        for (Idiom idiom : originaList) { 
         if (idiom.getVerb().contains(constraint)) 
          result.add(idiom); 
        } 
       } 
       oReturn.values = result; 
      } 
      return oReturn; 
     } 

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

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     View v = convertView; 

     // first check to see if the view is null. if so, we have to inflate it. 
     // to inflate it basically means to render, or show, the view. 
     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.simple_list_item_1, null); 
     } 
     return v; 
    } 

而且在我的活動使用它:

IdiomAdapter adapter = new IdiomAdapter(MainActivity.this, idioms); 
AutoCompleteTextView txtSearch = (AutoCompleteTextView) findViewById(R.id.txtSearch); 
txtSearch.setAdapter(adapter); 
當我 AutoCompleteTextView關鍵字輸入

,似乎工作但沒有結果顯示: enter image description here

任何想法?

+0

檢查數組列表是有值或不???? – 2014-09-22 05:24:52

+0

是的,值被填充。 – 2014-09-22 05:27:41

回答

0

只需嘗試setThreshold(1)AutoCompleteTextView即可。 加入這一行:使用此代碼

txtSearch.setThreshold(1); 

適配器:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Filter; 
import android.widget.TextView; 

public class DataSearchAdapter extends ArrayAdapter<DataSearchModel> { 
    private ArrayList<DataSearchModel> items; 
    private ArrayList<DataSearchModel> itemsAll; 
    private ArrayList<DataSearchModel> suggestions; 
    private int viewResourceId; 

    @SuppressWarnings("unchecked") 
    public DataSearchAdapter(Context context, int viewResourceId, 
      ArrayList<DataSearchModel> items) { 
     super(context, viewResourceId, items); 
     this.items = items; 
     this.itemsAll = (ArrayList<DataSearchModel>) items.clone(); 
     this.suggestions = new ArrayList<DataSearchModel>(); 
     this.viewResourceId = viewResourceId; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(viewResourceId, null); 
     } 
     DataSearchModel _data = items.get(position); 
     if (_data != null) { 
       TextView dataLabel = (TextView) v.findViewById(android.R.id.text1); 
      if (dataLabel != null) { 
       dataLabel.setText(_data.getDataName()); 
      } 
     } 
     return v; 
    } 

    @Override 
    public Filter getFilter() { 
     return nameFilter; 
    } 

    Filter nameFilter = new Filter() { 
     public String convertResultToString(Object resultValue) { 
      String str = ((DataSearchModel) (resultValue)).getDataName(); 
      return str; 
     } 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      if (constraint != null) { 
       suggestions.clear(); 
       for (DataSearchModel _data : itemsAll) { 
        if (_data.getDataName().toLowerCase() 
          .startsWith(constraint.toString().toLowerCase())) { 
         suggestions.add(_data); 
        } 
       } 
       FilterResults filterResults = new FilterResults(); 
       filterResults.values = suggestions; 
       filterResults.count = suggestions.size(); 
       return filterResults; 
      } else { 
       return new FilterResults(); 
      } 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, 
       FilterResults results) { 
      @SuppressWarnings("unchecked") 
      ArrayList<DataSearchModel> filteredList = (ArrayList<DataSearchModel>) results.values; 
      if (results != null && results.count > 0) { 
       clear(); 
       for (DataSearchModel c : filteredList) { 
        add(c); 
       } 
       notifyDataSetChanged(); 
      } 
     } 
    }; 

} 
+0

它不起作用。 – 2014-09-22 05:38:48

+0

@SirwanAfifi使用我發佈的適配器代碼更改您的適配器。 – Sats 2014-09-22 06:17:32

相關問題