如何自定义适配器添加到AutoCompleteTextView [英] How to add a custom adapter to an AutoCompleteTextView

查看:110
本文介绍了如何自定义适配器添加到AutoCompleteTextView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有简单的方法来设定的2的TextView下拉到AutoCompleteTextView。

Is there any simple way to set a 2 TextView dropdown to an AutoCompleteTextView.

android.R.layout.two_line_list_item 这我找不到任何例子如何使用。

There is android.R.layout.two_line_list_item Which I couldn't find any examples how to use.

所以,我想这样的:

public class TwoLineDropdownAdapter extends BaseAdapter {

    private LayoutInflater mInflater = null;
    private Activity activity;
    public ArrayList<TwoLineDropDown> values = new ArrayList<TwoLineDropDown>();

    public TwoLineDropdownAdapter(Activity a, ArrayList<TwoLineDropDown> items) {

        values = items;
        activity = a;
        mInflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {

        return values.size();
    }

    public TwoLineDropDown getItem(int position) {

        return values.get(position);
    }

    public long getItemId(int position) {

        return position;
    }

    public static class ViewHolder {

        public TextView title;
        public TextView description;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {

            holder = new ViewHolder();

            convertView = mInflater.inflate(R.layout.dropdown_text_twoline,
                    parent, false);
            holder.title = (TextView) convertView
                    .findViewById(R.id.text1);
            holder.description = (TextView) convertView
                    .findViewById(R.id.text2);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }

    public void add(TwoLineDropDown ei) {

        values.add(ei);
    }
}

但是,我面临着一个问题就在这里:

TwoLineDropdownAdapter AutoCompleteAdapter = new TwoLineDropdownAdapter(this, items);
myAutoComplete.setAdapter(AutoCompleteAdapter);

在设置适配器,它说:

约束不匹配:通用方法setAdapter型(T)   AutoCompleteTextView是不适用的参数   (TwoLineDropdownAdapter)。推断的类型TwoLineDropdownAdapter是   为界参数不是一个有效的替代品

Bound mismatch: The generic method setAdapter(T) of type AutoCompleteTextView is not applicable for the arguments (TwoLineDropdownAdapter). The inferred type TwoLineDropdownAdapter is not a valid substitute for the bounded parameter

如何解决此问题?

感谢您

推荐答案

根据该文件,推断的类型setAdapter在AutoCompleteTextView是:

According to the documentation, the inferred type of setAdapter in AutoCompleteTextView is :

<T extends ListAdapter & Filterable> void setAdapter(T adapter)

您适配器必须是ListAdapter(这BaseAdapter是,到目前为止一切顺利)和过滤的,这BaseAdapter不是,也不是你的适配器实现。我将延长一个ArrayAdapter,这是过滤的,更何况是将简化你的实现(你的一些方法复制ArrayAdapter的相同结果的方法):

Your adapter must be a ListAdapter (which BaseAdapter is, so far so good) and a Filterable, which BaseAdapter is not, nor is your Adapter implementation. I would extend an ArrayAdapter, which is Filterable, not to mention is would simplify your implementation (some of your methods duplicate methods of ArrayAdapter for the same result) :

public class TwoLineDropdownAdapter extends ArrayAdapter<TwoLineDropDown> {

    private LayoutInflater mInflater = null;
    private Activity activity;

    public TwoLineDropdownAdapter(Activity a, ArrayList<TwoLineDropDown> items) {
        super(a, 0, items);
        activity = a;
        mInflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public static class ViewHolder {

        public TextView title;
        public TextView description;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {

            holder = new ViewHolder();

            convertView = mInflater.inflate(R.layout.dropdown_text_twoline,
                    parent, false);
            holder.title = (TextView) convertView
                    .findViewById(R.id.text1);
            holder.description = (TextView) convertView
                    .findViewById(R.id.text2);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }
}

这篇关于如何自定义适配器添加到AutoCompleteTextView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆