在 recyclerview 中过滤产品列表 - android

Filter list of product in a recyclerview - android

所以我的 recyclerview 中有一个产品列表。有一个 editText 作为搜索词。

每次用户在 editText 字段中输入内容时,列表都必须被过滤。 使用实时搜索没有问题,并且过程运行良好。

为了获得更好的 ui 体验,我还为编辑文本创建了一个按钮 (btn_search)。但在这种情况下,当点击按钮时,列表没有被过滤,只是消失了。!!! 我的代码有什么问题。

代码:

这是调用 datachanged 的​​适配器中的函数:

ListAdapter :

    fun filterList(filtername : List<Model>) {
        this.model = filtername
       notifyDataSetChanged()
    }

activity :

    lateinit var editText: EditText
    lateinit var model: ArrayList<Model>
    lateinit var adapter: ListAdapter
    lateinit var button: Button
    lateinit var recyclerView: RecyclerView

  
    button = findViewById(R.id.btn_search)

    var list = ArrayList<Model>()
    list.add(somedata) ...


    recyclerView = findViewById(R.id.recyclerView)
    model = list
    recyclerView.layoutManager = GridLayoutManager(this@MainActivity, 2)
    adapter = ListAadapter(model)
    recyclerView.adapter = adapter


    editText = findViewById(R.id.edit_text_search)


    // this is where call btnsearch but the list not filtered and disappeared
     button.setOnClickListener {
                filter(editText.toString())
        }


    // with this live search there is no issue and list filtered
     
/*
      editText.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(text: Editable?) {
                filter(text.toString())
            }

            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }


        })*/


// this is the function for filter the list 
   

    fun filter(text: String) {
        val filterNameList = ArrayList<Model>()
        model.filterTo(filterNameList) { model ->
            model.title.contains(text)
        }
        adapter.filterList(filterNameList)
    }

知道我哪里做错了吗?

似乎您没有得到 EditText 文本,您正在将 EditText 直接转换为这一行中的字符串

button.setOnClickListener {
   filter(editText.toString())
}

所以,你需要改成这样

button.setOnClickListener {
   filter(editText.text.toString())
}