【问题标题】:Error with search in RecyclerView?在 RecyclerView 中搜索时出错?
【发布时间】:2018-06-07 11:54:37
【问题描述】:

我在我的适配器中添加了这个方法:

public  void filterlist(List<ListItem> newlist){
    listItems = new ArrayList<>();
    listItems.addAll(newlist);
    notifyDataSetChanged(); }
}

我在 MainActivity 中使用此代码过滤列表,我无法调用 filterlist() 方法

searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            //Do some magic
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //Do some magic
            String item = newText.toLowerCase();
            List<ListItem> newlist = new ArrayList<>();
            for (ListItem name:listItems){
                if (name.getDoname().toLowerCase().contains(newText)){newlist.add(name);}
            }

            // the is problem in this line

            adapter.filterlist(newlist); 
            return true;
        }
    }

这行有问题adapter.filterlist(newlist);

我无法调用 filterlist 方法,为什么会出现红色?

【问题讨论】:

  • 检查 adapter 是否是您的自定义适配器的实例。
  • 这段代码有什么异常吗?如果是,则粘贴 logcat。
  • 无法解析方法'filterlist(java.util.List)'
  • 把你所有的MainActivity和Adapter的代码放上来。
  • 谢谢你的问题是在初始化我的适配器

标签: android android-recyclerview call


【解决方案1】:

而不是

listItems = new ArrayList<>();
listItems.addAll(newlist);

执行以下操作:

listItems.clear();
listItems.addAll(newlist);

这是因为不是创建列表的新实例,而是修改现有列表实例以供适配器通知更改,

【讨论】:

    【解决方案2】:

    Adapter中的更新列表是这样的,

     public void updateList(ArrayList<Currency> temp) {
                this.mCurrencyList = temp;
                notifyDataSetChanged();
            }
    

    您必须在搜索框字段中应用它。 您应用了查询更改侦听器,我实现了 addTextChangeListener

    searchBox.addTextChangedListener(new TextWatcher() {
      @Override
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    
      @Override
      public void onTextChanged(CharSequence s, int start, int before, int count) {}
    
        @Override
        public void afterTextChanged(Editable s) {
        ArrayList<Currency> temp = new ArrayList();
        for (Currency d : mCurrencyList) {
        if (d.getCode().toLowerCase().contains(s.toString().toLowerCase())) {
        temp.add(d);
                    }
                     }
        mSelectCurrencyAdapter.updateList(temp);
                        }
        });
    

    最重要的是您应用了搜索视图,而我应用了编辑文本视图。

    但我认为这也适用于搜索视图。

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多