AutoCompleteTextView - 禁用过滤

Alo*_*mir 14 java android filter autocompletetextview android-arrayadapter

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

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

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

Krz*_*tow 25

可能@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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Nez*_*cer 10

将文本设置为 AutoCompleteTextView 时,请使用setText(CharSequence text, boolean filter). 将过滤器设置为 false,这会在不激活过滤器的情况下设置文本


小智 6

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

            }
        };
    }
}

Run Code Online (Sandbox Code Playgroud)


Alo*_*mir 5

最终我子类化了ArrayAdapter,通过重写它的getFilter方法禁用了过滤器,并HTTPRequest在“文本更改”事件期间创建了我的过滤器。

  • 请添加一些代码或描述您的解决方案。我完全陷入困境。 (2认同)