android - 如何使用 kotlin 向 RecyclerViewAdapter 添加过滤器?
问题描述
我想向这个 RecyclerViewAdapter 添加一个过滤器,请在这段代码中提供帮助
注意:我使用一个类来填充列表,这个类将四个参数作为输入(三个字符串和一个图像(Int))。
like the following example : booksList.add(Book("The Wild Robot", "A 2 Categorie Book", "Description book", R.drawable.thewildrobot)) booksList.add(Book("Maria Semples", "Categorie Book", "Description book", R.drawable.mariasemples))
RecyclerView 适配器
import android.content.Intent
import android.support.v7.widget.CardView
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import kotlin.collections.ArrayList
@Suppress("UNREACHABLE_CODE")
class RecyclerViewAdapter(private val mContext: List_of_Books, private val mData: MutableList<Book>) : RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder>() {
private var mFilteredList: MutableList<Book>? = null
init {
mFilteredList = mData
}
override fun getItemCount(): Int {
return mData.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view: View
val mInflater = LayoutInflater.from(mContext)
view = mInflater.inflate(R.layout.cardveiw_item_book, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.tv_book_title.text = mData[position].getTitle()
holder.img_book_thumbnail.setImageResource(mData[position].thumbnail)
holder.cardView.setOnClickListener {
val intent = Intent(mContext, Book_Activity::class.java)
// passing data to the book activity
intent.putExtra("Title", mData[position].getTitle())
intent.putExtra("Description", mData[position].description)
intent.putExtra("Thumbnail", mData[position].thumbnail)
intent.putExtra("Category", mData[position].category)
// start the activity
mContext.startActivity(intent)
}
}
fun setfilter(listitem: MutableList<Book>): MutableList<Book>? {
mFilteredList!!.clear()
/*mFilteredList = ArrayList()*/
mFilteredList!!.addAll(listitem)
notifyDataSetChanged()
return mFilteredList
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
internal var tv_book_title: TextView = itemView.findViewById(R.id.book_title_id) as TextView
internal var img_book_thumbnail: ImageView = itemView.findViewById(R.id.book_img_id) as ImageView
internal var cardView: CardView = itemView.findViewById(R.id.cardview_id) as CardView
}
}
当我在 EdiText 中写入时,什么都没有改变,我将这段代码用于 Editext:
fun filter(pl: MutableList<Book>, query: String): MutableList<Book> {
var query = query
query = query.toLowerCase()
val filteredModeList = ArrayList<Book>()
for (model in pl) {
val text = model.getTitle()!!.toLowerCase()
if (text.startsWith(query) || (text.contains(query))) {
filteredModeList.add(model)
}
}
return filteredModeList
}
val editText = findViewById<EditText>(R.id.editText)
editText.hint = getString(R.string.Search_here)
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
val filtermodelist = filter(booksList, p0.toString())
myAdapter.setfilter(filtermodelist)
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
})
书课
import com.medanis.fneclisbooks.R.attr.title
import com.medanis.fneclisbooks.R.string.category
import com.medanis.fneclisbooks.R.string.description
import java.util.ArrayList
import kotlin.reflect.KMutableProperty1
import android.R.attr.name
class Book(title: String, category: String, description: String, var thumbnail: Int) {
private var title: String? = title
var category: String? = category
var description: String? = description
fun getTitle(): String? {
return title
}
fun setTitle(title: String) {
this.title = title
}}
我认为问题出在适配器中的过滤器中,那里有问题,请帮助我修复它
请帮助我,如果您需要更多信息,请在评论中告诉我。
解决方案
推荐阅读
- python - 下载了一个jupyter笔记本,但它不会打开
- javascript - 在另一个 API 调用之前清除 api 响应数组
- c++ - 使用无序映射返回向量中元素摘要的最佳方法是什么?
- python - 在 python 中使用 selenium 跳过空文本节点
- java - 更改下载文件中的作者日期
- c++ - 如何在 macOS 上使用 gcc 而不是 clang,特别是 M1?
- java - 未记录的热点 OpenJDK 系统属性
- intellij-idea - 如何在 vscode 中使用 intellij 的代码格式化程序?
- kubernetes - CPU 份额的混乱和对 CPU 限制的需求
- javascript - 命令未执行