【发布时间】:2021-11-12 22:41:40
【问题描述】:
我启动了调试器,我的断点显示,在第一次启动时,数据集正在传输,因为适配器正在初始化,但是一旦我调用过滤器,它就没有任何数据可以使用,而我的 recyclerview 只是保持原样。
所有这些代码之前都可以使用,我只是将它从 Java 翻译成 Kotlin。我一定是搞砸了,但我找不到。
适配器类
class ClothingListAdapterKt(
private val dataSetIn: MutableList<Clothing>,
private val listener: ClothingListAdapterKt.OnItemClickListener,
private val context: Context
) :
RecyclerView.Adapter<ClothingListAdapterKt.ViewHolder>(), Filterable {
private var lastPosition = -1
var dataSet = mutableListOf<Clothing>()
var dataSetFiltered = mutableListOf<Clothing>()
init {
dataSet = dataSetIn
dataSetFiltered = dataSet
}
override fun onBindViewHolder(viewHolder: ClothingListAdapterKt.ViewHolder, position: Int) {
val currentClothing: Clothing = dataSetFiltered[position]
// Get element from your dataset at this position and replace the
// contents of the view with that element
//SETTING MY VIEWS, ONLY COMMENTED OUT FOR THIS QUESTION
}
setAnimation(viewHolder.itemView, position);
}
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults? {
val charString: String = constraint.toString()
if (charString.isEmpty()) {
dataSetFiltered.addAll(dataSet)
} else {
val dataSetTemp: MutableList<Clothing> = mutableListOf()
for (row in dataSet) {
if (row.name.lowercase().contains(charString.lowercase())) {
dataSetTemp.add(row)
}
}
dataSetFiltered = dataSetTemp
}
val filterResults = FilterResults()
filterResults.values = dataSetFiltered
return filterResults
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
dataSetFiltered = results?.values as MutableList<Clothing>
notifyDataSetChanged()
}
}
}
适配器初始化
recylcerViewClothing.adapter = ClothingListAdapterKt(clothing, listener, this.requireContext())
这就是我所说的过滤器
adapter.filter.filter(searchTerm) //searchTerm is a String passed by the constructor of the function it sits in
【问题讨论】:
标签: android kotlin android-recyclerview filtering android-filter