Android AutoCompleteTextView中的不兼容类型

时间:2015-12-16 08:38:41

标签: android

我试图在Android中的SQlite数据库中添加AutoCompleteTextView中的多个值。但它显示此方法的不兼容类型=

@Override
public String getItem(int position) {
    return fullList.get(position);
} 

public class AutoCompleteAdapter extends ArrayAdapter<AutoCompleteObject> implements Filterable {

    private ArrayList<AutoCompleteObject> fullList;
    private ArrayList<AutoCompleteObject> mOriginalValues;
    private ArrayFilter mFilter;

    public AutoCompleteAdapter(Context context, int resource, int textViewResourceId, ArrayList<AutoCompleteObject> fullList) {

            super(context, resource, textViewResourceId, fullList);
            this.fullList = fullList;
            mOriginalValues = new ArrayList<AutoCompleteObject>(fullList);

        }

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

        @Override
        public String getItem(int position) {
            return fullList.get(position);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return super.getView(position, convertView, parent);
        }

        @Override
        public Filter getFilter() {
            if (mFilter == null) {
                mFilter = new ArrayFilter();
            }
            return mFilter;
        }

        private class ArrayFilter extends Filter {
            private Object lock;

            @Override
            protected FilterResults performFiltering(CharSequence prefix) {
                FilterResults results = new FilterResults();

                if (mOriginalValues == null) {
                    synchronized (lock) {
                        mOriginalValues = new ArrayList<AutoCompleteObject>(fullList);
                    }
                }

                if (prefix == null || prefix.length() == 0) {
                    synchronized (lock) {
                        ArrayList<AutoCompleteObject> list = new ArrayList<AutoCompleteObject>(
                                mOriginalValues);
                        results.values = list;
                        results.count = list.size();
                    }
                } else {
                    final String prefixString = prefix.toString().toLowerCase();

                    ArrayList<AutoCompleteObject> values = mOriginalValues;
                    int count = values.size();

                    ArrayList<AutoCompleteObject> newValues = new ArrayList<AutoCompleteObject>(count);

                    for (int i = 0; i < count; i++) {
                        String item = values.get(i);
                        if (item.toLowerCase().contains(prefixString)) {
                            newValues.add(item);
                        }

                    }
                    results.values = newValues;
                    results.count = newValues.size();
                }

                return results;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,
                                          Filter.FilterResults results) {

                if (results.values != null) {
                    fullList = (ArrayList<AutoCompleteObject>) results.values;
                } else {
                    fullList = new ArrayList<AutoCompleteObject>();
                }
                if (results.count > 0) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

这种做法怎么样?

@Override
    public String getItem(int position) {
        AutoCompleteObject obj = fullList.get(position);
        String item = obj.getYourValue() + " " + obj.getAnotherValue();
        return item;
    }

当然,这意味着您需要将泛型类型更改为String。

答案 1 :(得分:0)

您的getItem返回String,但fullList包含AutoCompleteObject。你应该像

一样改变它
    @Override
    public AutoCompleteObject getItem(int position) {
        return fullList.get(position);
    }

您的Adapter具有通用类型AutoCompleteObjectArrayAdapter<AutoCompleteObject>)。此外,super.getItem会返回T,因此您无法真正更改方法的签名,使其返回String。如果这样做,您将收到另一个编译时错误