android - 在过滤recyclerview列表中清除EditText不起作用
问题描述
这是我在 MainActivity 中过滤的代码
search!!.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
adapter!!.filter.filter(charSequence.toString())
}
override fun afterTextChanged(editable: Editable) {}
})
这是我在适配器类中的代码
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
//new list for filtering
newList.clear()
val results = FilterResults()
if (constraint.isNullOrBlank()) {
//dataList is a list with data from mainActivity
newList!!.addAll(dataList!!)
} else {
val filterPattern = constraint.toString().toLowerCase().trim { it <= ' ' }
for (item in dataList) {
if (item.sv_number.toString().toLowerCase().contains(filterPattern)) {
newList!!.add(item)
}
}
}
results.values = newList
results.count = newList!!.size
return results
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
if (newList.isNullOrEmpty()) {
Log.d("there is nothing", "nothing")
} else dataList.clear()
dataList.addAll(newList)
notifyDataSetChanged()
}
}
}
过滤工作正常,如果我输入例如 123,它将过滤它。但是当我删除我输入的内容(123)时,它不会回到旧视图,所有数据,所以我可以再次搜索。仅显示带有过滤数据的新过滤视图。我在这里做错了什么?
解决方案
我认为您正在使用 dataList 在回收站视图中显示列表。修改过滤dataList后问题出在这里。因此,当您删除搜索文本时,没有包含原始数据的列表可以将其加载回过滤后的元素。我建议创建一个包含原始数据的列表,比如 originalList。首先加载复制 this(originalList) 到 dataList。
修改你的代码
if (constraint.isNullOrBlank()) {
//originalList is a list with data from mainActivity
newList!!.addAll(originalList!!)
} else {
val filterPattern = constraint.toString().toLowerCase().trim { it <= ' ' }
for (item in originalList) {
if (item.sv_number.toString().toLowerCase().contains(filterPattern)) {
newList!!.add(item)
}
}
}
推荐阅读
- mysql - 从 3 个不同的列中选择不同的记录
- vb.net - 如何将字符串转换为时间跨度?视觉基础,秒表,圈系统
- java - Java - 将整数复制到长
- android - 相对布局上方的线性布局(重力底部)
- angular - 从 API 访问实时数据(访问 Dynamo DB 数据)而无需在 Angular 6 中刷新页面(异步)
- python - 在 django 中获取基于时间的模型统计信息
- python - 将二维 numpy 数组与一维 numpy 数组进行比较
- android - 底部导航视图缩小
- android - 在cordova(Xcode)中添加在浏览器插件中打开
- vue.js - Vue froala - 添加标签