【问题标题】:MultiAutoCompleteTextView with custom adapter (BaseAdapter)MultiAutoCompleteTextView 与自定义适配器 (BaseAdapter)
【发布时间】:2016-07-16 00:20:59
【问题描述】:

我正在使用 MultiAutoCompleteTextView 并在其上设置我自己的自定义适配器 (BaseAdapter)。但是每次我在 MultiAutoCompleteTextView 中写东西时,performFiltering 方法中的约束总是为我写的每个字符获取 null 值。

这是我的 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);

我在这里做错了什么?

编辑: 我将我的MultiAutoCompleteTextView 更改为AutoCompleteTextView,现在它可以工作了,有谁知道如何使它适用于 MultiAutoCompleteTextView?

【问题讨论】:

    标签: android filter autocompletetextview


    【解决方案1】:

    您需要将setTokenizer() 发送至您的MultiAutoCompleteTextView 才能使其正常工作。

    你可以使用 -

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

    如果您有任何特殊要求,即使您可以设置自己的自定义标记器,也可以使用CommaTokenizer,每次从下拉列表中选择任何选项时都会附加逗号(,)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多