AutoCompleteTextView - 禁用过滤

时间:2011-12-14 22:40:20

标签: java android filter android-arrayadapter autocompletetextview

我正在检索webservice中的字符串列表,我想在AutoCompleteTextField上列出它们,而不管内置的AutoCompleteTextField过滤器。

我该怎么做?有没有办法轻松禁用它的内部过滤(最好没有子类) 我已将所有结果加载到ArrayAdapter,问题是其中一些因为过滤而未显示。

如果我走向错误的方向,请指出正确的方向。

4 个答案:

答案 0 :(得分:22)

@Alon可能意味着继承ArrayAdapter,而不是AutoCompleteTextView。在getFilter()方法中,必须返回自定义过滤器,该过滤器根本不执行过滤(在performFiltering()中)。可能性能可能是一个问题 - 因为它产生了。最好的方法是从TextEdit派生并实现自己的完成弹出窗口。但到目前为止,对我来说这又是一件麻烦事。最后,我做了如下的事情,它对我有用。任何反馈意见。

public class KArrayAdapter<T> 
extends ArrayAdapter<T>
{
    private Filter filter = new KNoFilter();
    public List<T> items;

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

    public KArrayAdapter(Context context, int textViewResourceId,
            List<T> objects) {
        super(context, textViewResourceId, objects);
        Log.v("Krzys", "Adapter created " + filter);
        items = objects;
    }

    private class KNoFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence arg0) {
            FilterResults result = new FilterResults();
                result.values = items;
                result.count = items.size(); 
            return result;
        }

        @Override
        protected void publishResults(CharSequence arg0, FilterResults arg1) {
            notifyDataSetChanged();
        }
    }
}

希望它有所帮助。

答案 1 :(得分:4)

将文本设置为AutoCompleteTextView时,请使用setText(CharSequence text, boolean filter)。 将filter设置为false,这将设置文本而不激活filter

答案 2 :(得分:1)

最后我将ArrayAdapter子类化,通过覆盖它的getFilter方法禁用过滤器,并在“文本更改”事件期间制作我的HTTPRequest

答案 3 :(得分:0)

我通过制作一个自定义适配器扩展了ArrayAdapter类并覆盖了其getFilter()方法来解决了我的问题。这样,将不会基于放置在TextField中的任何文本来过滤列表,并且将显示所有项目。

public class MyAdapter extends ArrayAdapter{
    public MyAdapter(@NonNull Context context, int resource) {
        super(context, resource);
    }

    public MyAdapter(@NonNull Context context, int resource, int textViewResourceId) {
        super(context, resource, textViewResourceId);
    }

    public MyAdapter(@NonNull Context context, int resource, @NonNull Object[] objects) {
        super(context, resource, objects);
    }

    public MyAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull Object[] objects) {
        super(context, resource, textViewResourceId, objects);
    }

    public MyAdapter(@NonNull Context context, int resource, @NonNull List objects) {
        super(context, resource, objects);
    }

    public MyAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List objects) {
        super(context, resource, textViewResourceId, objects);
    }

    @NonNull
    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                return null;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

            }
        };
    }
}