Java AutoCompleteTextView-禁用筛选

Java AutoCompleteTextView-禁用筛选,java,android,filter,android-arrayadapter,autocompletetextview,Java,Android,Filter,Android Arrayadapter,Autocompletetextview,我正在从webservice检索字符串列表,我想将它们列在AutoCompleteTextField上,而不考虑内置的AutoCompleteTextField过滤器 我该怎么做?有没有一种方法可以轻松地禁用它的内部过滤(最好不用子类化) 我已将所有结果加载到阵列适配器中,问题是其中一些结果由于过滤而无法显示 如果我走错了方向,请给我指出正确的方向。最终我对ArrayAdapter进行了子类化,通过覆盖它的getFilter方法禁用了过滤器,并在“文本更改”事件期间对我的HTTPRequest进

我正在从
webservice
检索字符串列表,我想将它们列在
AutoCompleteTextField
上,而不考虑内置的
AutoCompleteTextField
过滤器

我该怎么做?有没有一种方法可以轻松地禁用它的内部过滤(最好不用子类化) 我已将所有结果加载到
阵列适配器中
,问题是其中一些结果由于过滤而无法显示


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

最终我对
ArrayAdapter
进行了子类化,通过覆盖它的
getFilter
方法禁用了过滤器,并在“文本更改”事件期间对我的
HTTPRequest
进行了子类化。

可能@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();
        }
    }
}
公共类适配器
扩展阵列适配器
{
私有过滤器=新过滤器();
公共清单项目;
@凌驾
公共过滤器getFilter(){
回流过滤器;
}
公共KArrayAdapter(上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
Log.v(“Krzys”,“适配器创建”+过滤器);
项目=对象;
}
私有类过滤器扩展了过滤器{
@凌驾
受保护的筛选器结果执行筛选(字符序列arg0){
FilterResults结果=新的FilterResults();
结果值=项目;
result.count=items.size();
返回结果;
}
@凌驾
受保护的void publishResults(字符序列arg0,FilterResults arg1){
notifyDataSetChanged();
}
}
}

希望能有帮助

我通过创建一个自定义适配器扩展
ArrayAdapter
类并重写其
getFilter()
方法,解决了我的问题。这样,列表将不会根据文本字段中的任何文本进行过滤,并且将显示所有项目

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) {

            }
        };
    }
}


将文本设置为AutoCompleteTextView时,请使用
setText(字符序列文本,布尔过滤器)

将filter设置为false,这将在不激活过滤器的情况下设置文本

您好,谢谢,我也有同样的问题。如果您能发布一些相关代码,我将不胜感激。提前感谢。请添加一些代码或描述您的解决方案。拉吉维亚达夫:克尔兹托的新答案对你有帮助吗?这是非常需要的答案!我损失了半天。谢谢你,兄弟:)