首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android:在自动完成结果中什么都没有出现

android:在自动完成结果中什么都没有出现
EN

Stack Overflow用户
提问于 2014-09-22 05:10:51
回答 1查看 183关注 0票数 0

我已经为我的Filterable实现了AutoCompleteTextView

代码语言:javascript
复制
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;
    }

在我的活动中使用它:

代码语言:javascript
复制
IdiomAdapter adapter = new IdiomAdapter(MainActivity.this, idioms);
AutoCompleteTextView txtSearch = (AutoCompleteTextView) findViewById(R.id.txtSearch);
txtSearch.setAdapter(adapter);

当我在AutoCompleteTextView中键入关键字时,似乎是在工作,但结果却什么也没有显示:

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-22 05:35:23

只需尝试setThreshold(1) of AutoCompleteTextView。增加这一行:

代码语言:javascript
复制
txtSearch.setThreshold(1);  

使用此代码的适配器:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25967051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档