【问题标题】:Recyclerview not updating on searchview text changeRecyclerview 未更新 searchview 文本更改
【发布时间】:2019-04-04 11:01:19
【问题描述】:

朋友们,我有一个类似于 searchview 的 edittext。在文本更改时,它正在获取数据并存储在 filterdNames 中,但它没有更新 recyclerview。请帮助,我是 Android 新手。 这是我的 recyclerview 适配器代码-

public class MyCategoryAdaptercheckbox extends RecyclerView.Adapter<MyCategoryAdaptercheckbox.ViewHolder> {
    List<GetMyCategoryAdapter> getMyCategoryAdapter;
    Context context;
    List<String> category_name;
   GetMyCategoryAdapter getMyCategoryAdapter1;

    public MyCategoryAdaptercheckbox(List<GetMyCategoryAdapter> getMyCategoryAdapter, Context context, List<String> category_name) {
    this.getMyCategoryAdapter = getMyCategoryAdapter;
    this.context = context;
    this.category_name = category_name;
    }
    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        if (viewHolder instanceof ViewHolder){
        }
        getMyCategoryAdapter1 =  getMyCategoryAdapter.get(i);
      ((ViewHolder) viewHolder).tv_categorytitle.setText(getMyCategoryAdapter1.getC_name());
        ((ViewHolder) viewHolder).tv_categoryid.setText(getMyCategoryAdapter1.getC_id());
        ((ViewHolder) viewHolder).gt= getMyCategoryAdapter1;
    }

    public void filterList(ArrayList<String> filterdNames) {
       this.category_name = filterdNames;
       notifyDataSetChanged();
    } 
}

这是我的 GetMyCategoryAdapter 类代码 -

public class GetMyCategoryAdapter {
    String c_name,c_id;

    public String getC_name() {
        return c_name;
    }

    public void setC_name(String c_name) {
        this.c_name = c_name;
    }

    public String getC_id() {
        return c_id;
    }

    public void setC_id(String c_id) {
        this.c_id = c_id;
    }
}

这是片段代码-

searchView.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                //after the change calling the method and passing the search input
                filter(editable.toString());
            }
        });
   private void filter(String text) {
        //new array list that will hold the filtered data
        ArrayList<String> filterdNames = new ArrayList<>();

        //looping through existing elements
        for (String s : category_name) {
            //if the existing elements contains the search input
            if (s.toLowerCase().contains(text.toLowerCase())) {
                //adding the element to filtered list
                filterdNames.add(s);
            }
        }

        //calling a method of the adapter class and passing the filtered list
        ((MyCategoryAdaptercheckbox) MyAdapter).filterList(filterdNames);



    }

【问题讨论】:

  • 在你的 filterlist 方法中你 notifyDataSetChanged();适配器,但它不起作用。删除它并重新设置适配器。
  • 请贴出适配器的onCreateViewHoldergetItemCount方法
  • @HemantParmar 我该怎么做?
  • @S-Sh..那些方法与此无关

标签: android android-recyclerview adapter searchview notifydatasetchanged


【解决方案1】:

问题出在filterList 方法中: 您更新了category_name,但没有更新getMyCategoryAdapter(在onBindViewHolder 中使用)。尝试在notifyDataSetChanged之前更改getMyCategoryAdapter

【讨论】:

  • 我试过了,但它没有改变..你能告诉我应该如何改变它吗?
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2021-08-20
相关资源
最近更新 更多