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