首页 > 解决方案 > 如何从自定义 listAdapter 重置搜索并显示所有数据?

问题描述

我已经实现了自定义列表适配器,我还添加了搜索过滤器。我的问题是搜索完成后如何重置过滤器并显示所有数据。如果我按 x 图标从SearchView.

我的 CustomListAdapter 是:

ublic class ChartListAdapter extends BaseAdapter implements Filterable {
    ArrayList<ChartModel> list;
    ArrayList<ChartModel> filteredList;
    private ChartEventHandler chartEventHandler;
    Activity context;

    public ChartListAdapter(ArrayList<ChartModel> list, Activity context, ChartEventHandler chartEventHandler) {
        this.list = list;
        this.filteredList = list;
        this.context = context;
        this.chartEventHandler = chartEventHandler;
    }

    @Override
    public int getCount() {
        if(filteredList != null) {
            return filteredList.size();
        } else {
            return 0;
        }

    }

    @Override
    public Object getItem(int i) {
        return filteredList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        if(view == null) {
            view = View.inflate(context, R.layout.chart_card, null);
        }

        TextView chart_name = view.findViewById(R.id.chart_name);
        SwitchCompat switchCompat = view.findViewById(R.id.chart_selected);
        switchCompat.setTag(filteredList.get(i).getChart_id());
        chart_name.setText(filteredList.get(i).getChart_name());
        switchCompat.setChecked(filteredList.get(i).getCard_selected());


        switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(!isNetworkAvailable(context) && b) {
                    compoundButton.setChecked(false);
                    chartEventHandler.showCharts("no", false);
                } else {
                    String getTag = compoundButton.getTag().toString();
                    chartEventHandler.showCharts(getTag, b);
                }
            }
        });



        return view;
    }

    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults filterResults = new FilterResults();
                if(constraint == null || constraint.length() == 0){
                    filteredList = list;
                }else{
                    ArrayList<ChartModel> resultsModel = new ArrayList<>();
                    String searchStr = constraint.toString().toLowerCase();

                    for(ChartModel itemsModel:list){
                        if(itemsModel.getChart_id().contains(searchStr)){
                            resultsModel.add(itemsModel);

                        }
                        filteredList = resultsModel;
                    }
                    filterResults.values = filteredList;
                    return filterResults;
                }

                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

                filteredList = (ArrayList<ChartModel>) results.values;
                notifyDataSetChanged();


            }
        };
    }

PS:我不想将listView的adapter设置为null并重新插入数据。任何建议都会有很大帮助。谢谢你。

标签: androidandroid-listview

解决方案


推荐阅读