我正在检索webservice
中的字符串列表,我想在AutoCompleteTextField
上列出它们,而不管内置的AutoCompleteTextField
过滤器。
我该怎么做?有没有办法轻松禁用它的内部过滤(最好没有子类)
我已将所有结果加载到ArrayAdapter
,问题是其中一些因为过滤而未显示。
如果我走向错误的方向,请指出正确的方向。
答案 0 :(得分:22)
@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();
}
}
}
希望它有所帮助。
答案 1 :(得分:4)
将文本设置为AutoCompleteTextView时,请使用setText(CharSequence text, boolean filter)
。
将filter设置为false,这将设置文本而不激活filter
答案 2 :(得分:1)
最后我将ArrayAdapter
子类化,通过覆盖它的getFilter
方法禁用过滤器,并在“文本更改”事件期间制作我的HTTPRequest
。
答案 3 :(得分:0)
我通过制作一个自定义适配器扩展了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) {
}
};
}
}