android - Android AutoCompleteTextView 不调用 getView() 方法
问题描述
这是我用于自动完成文本视图的自定义适配器的代码
我试过这个解决方案链接 这个解决方案说项目数可能是 0,但在我的情况下项目数不是 0。
它永远不会去 getView() 方法。我尝试从Fragment调用它,我尝试从Activity调用它
我也尝试了这个答案的解决方案以及链接,但它不起作用。
它永远不会进入 getView() 方法。
public class BusCityListAdapter extends ArrayAdapter<BusCityList> {
private ArrayList<BusCityList> cityList;
private ArrayList<BusCityList> tempCityList;
private ArrayList<BusCityList> suggestionsList;
public BusCityListAdapter(Context context, ArrayList<BusCityList> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
this.cityList = objects;
this.tempCityList = new ArrayList<BusCityList>(objects);
this.suggestionsList = new ArrayList<BusCityList>(objects);
}
@Override
public int getCount() {
System.out.println("Main List Size=="+cityList.size());
System.out.println("Temp List Size=="+tempCityList.size());
System.out.println("Suggestion List Size=="+suggestionsList.size());
return cityList.size();
}
@Override
public BusCityList getItem(int position) {
return cityList.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("Inside GetView");
BusCityList busCity = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.bus_city_name_layout, parent, false);
}
MyTextView bus_name_label = (MyTextView) convertView.findViewById(R.id.bus_name_label);
if (bus_name_label != null)
bus_name_label.setText(busCity.getCity_name());
// Now assign alternate color for rows
return convertView;
}
@Override
public Filter getFilter() {
return myFilter;
}
Filter myFilter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
BusCityList busCity = (BusCityList) resultValue;
return busCity.getCity_name();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestionsList.clear();
for (BusCityList city : tempCityList) {
if (city.getCity_name().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
suggestionsList.add(city);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestionsList;
filterResults.count = suggestionsList.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<BusCityList> c = (ArrayList<BusCityList>) results.values;
if (results != null && results.count > 0) {
clear();
for (BusCityList city : c) {
add(city);
notifyDataSetChanged();
}
}
}
};
}
这是我将适配器设置为 AutoCompleteTextView 的代码
AutoCompleteTextView txtToWhere = (AutoCompleteTextView) v.findViewById(R.id.txtToWhere);
busCityListAdapter = new BusCityListAdapter(getActivity(), arrayList);
txtToWhere.setAdapter(busCityListAdapter);
busCityListAdapter.notifyDataSetChanged();
解决方案
推荐阅读
- mysql - MySQL Join - 不是唯一的表/别名错误
- java - 为什么从类似 JSON 的数据转换为 POJO 时 Firestore 不使用 setter?
- node.js - Node.js 和 Travis CI:安装 node-lua 包时找不到 lua.h
- tensorflow - Tensorflow 服务 - 如何使用大词嵌入?
- apache-spark - 为什么 sc.wholeTextFile().collect() 慢
- python - Django 表单不保存图像文件
- javascript - 根据 Javascript 中不同的搜索属性值数组匹配数组中的一组对象
- asp.net - 如何将未知数量的表记录从视图传递回 ASP.NET 中的控制器
- sql - MySQL 每 15 分钟计算一次平均值
- sql-server - SSMS 项目但不移动文件