2016-03-28 6 views
2

私はMultiAutoCompleteTextViewを使用しており、独自のカスタムアダプタ(BaseAdapter)を設定しています。しかし、私がMultiAutoCompleteTextViewに何かを書き込むたびに、performFilteringメソッドの制約は、書き込むすべての文字に対して常にnull値を取得します。ここでカスタムアダプタ(BaseAdapter)を使用したMultiAutoCompleteTextView

はBaseAdapterクラスの私のコードです:ここでは

public class ListItemAdapter extends BaseAdapter implements Filterable{ 
    ArrayList<ListItem> listItems; 
    ArrayList<ListItem> suggestions = new ArrayList<>(); 
    private Filter filter = new CustomFilter(); 
    Context context; 
    LayoutInflater inflater; 

    public ListItemAdapter(ArrayList<ListItem> listItems, Context context) { 
     this.listItems = listItems; 
     this.context = context; 
     inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return listItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listItems.get(position); 
    } 

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

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

     v = inflater.inflate(R.layout.single_item, null); 
     TextView title = (TextView) v.findViewById(R.id.title); 

     title.setText(listItems.get(position).getTitle()); 
     return v; 
    } 

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

    private class CustomFilter extends Filter { 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      suggestions.clear(); 

      Log.d("FILTERRES", ""+listItems.size() + ", " + constraint); 

      if(listItems != null && constraint != null) { 
       for(int i=0 ; i<listItems.size(); i++) { 
        if(listItems.get(i).getTitle().toLowerCase().contains(constraint)) { 
         suggestions.add(listItems.get(i)); 
        } 
       } 
      } 

      FilterResults results = new FilterResults(); 
      results.values = suggestions; 
      results.count = suggestions.size(); 
      return results; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      if(results.count > 0) { 
       notifyDataSetChanged(); 
      } else { 
       notifyDataSetInvalidated(); 
      } 
     } 
    } 
} 

は、私がMultiAutoCompleteTextViewにアダプタを設定しています方法です:私はここで間違って

MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.auto); 
ListItemAdapter adapter = new ListItemAdapter(items, this); 
textView.setThreshold(1); 
textView.setAdapter(adapter); 

何をしているのですか?

編集: 私はMultiAutoCompleteTextViewAutoCompleteTextViewに、今、それが働いている私の変更、誰もがそれはMultiAutoCompleteTextViewのために働くようにする方法を知っていますか?

答えて

2

MultiAutoCompleteTextViewにはsetTokenizer()が必要です。

あなたは使用することができます -

textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 

をあなたは、あなたがドロップダウンから任意のオプションを選択し、カンマ(、)毎回を追加したCommaTokenizerを使用することができ、他の特別な要件を持っている場合でも、独自のカスタムトークナイザを設定することができます。

関連する問題