在 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())
}
所以我的 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())
}