【发布时间】:2014-06-23 08:26:31
【问题描述】:
我的 AutoCompleteTextView 的自定义适配器中的过滤器有问题。它不想显示过滤后的列表。我知道过滤器过滤了我的列表,因为例如我的列表中有“Paris/FRANCE”,当我在 AutoCompleteTextView 中键入它时,列表仍然显示,但它继续显示完整列表而不是过滤列表。如果我键入“Pary”,则在键入“Y”字母后列表会消失。这就是我知道过滤器有效的原因。
这是我的代码:
public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable
{
private ArrayList<String> data;
public AutoCompleteAdapter(Context context, int resource, ArrayList<String> objects)
{
super(context, resource, objects);
data = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.item, null);
}
String s = getItem(position);
if (s != null)
{
TextView city = (TextView)v.findViewById(R.id.city);
TextView country = (TextView)v.findViewById(R.id.country);
String[] split = s.split("/");
city.setText(split[0]);
country.setText(split[1]);
}
return v;
}
@Override
public Filter getFilter()
{
return new Filter()
{
@Override
protected FilterResults performFiltering(CharSequence prefix)
{
FilterResults fr = new FilterResults();
if(prefix != null)
{
ArrayList<String> filtered = new ArrayList<String>();
for(String s : data)
{
if(s.toLowerCase().contains(prefix.toString().toLowerCase()))
{
filtered.add(s);
}
}
fr.values = filtered;
fr.count = filtered.size();
}
return fr;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence contraint, FilterResults results)
{
data = (ArrayList<String>)(results.values);
if(results != null && results.count > 0)
{
notifyDataSetChanged();
}
else
{
notifyDataSetInvalidated();
}
}
};
}
}
请原谅我英语不好,希望你能帮助我。谢谢
【问题讨论】:
-
我建议你在你的
getFilter()方法中设置一个断点,并使用调试器来找出发生了什么。
标签: java android autocompletetextview