首页 > 解决方案 > 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();

标签: androidautocompletetextview

解决方案


推荐阅读