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,这将在不激活过滤器的情况下设置文本您好,谢谢,我也有同样的问题。如果您能发布一些相关代码,我将不胜感激。提前感谢。请添加一些代码或描述您的解决方案。拉吉维亚达夫:克尔兹托的新答案对你有帮助吗?这是非常需要的答案!我损失了半天。谢谢你,兄弟:)