AutoCompleteTextView - 禁用过滤

java android filter android-arrayadapter autocompletetextview

4786 观看

3回复

3099 作者的声誉

我正在从a中检索字符串列表,webservice我想在AutoCompleteTextField不管内置AutoCompleteTextField过滤器的情况下列出它们。

我怎么做?有没有办法很容易地禁用它的内部过滤(最好没有子类)我已经将所有结果加载到a中ArrayAdapter,问题是它们中的一些因为过滤而没有显示出来。

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

作者: Alon Amir 的来源 发布者: 2011 年 12 月 14 日

回应 (3)


1

3099 作者的声誉

决定

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

作者: Alon Amir 发布者: 04.01.2012 02:05

23

531 作者的声誉

可能@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();
        }
    }
}

希望能帮助到你。

作者: Krzysztow 发布者: 15.02.2012 02:07

0

1 作者的声誉

我通过使自定义适配器扩展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) {

            }
        };
    }
}

作者: cHAuHaN 发布者: 21.07.2019 01:49
32x32