【发布时间】:2021-10-21 00:35:29
【问题描述】:
我已经使用 searchview 创建了 recyclerview,但我想突出显示我在 searchview 中输入的 recyclerview 中的文本。我在 onviewholder 中尝试了一些方法,但没有奏效。有什么办法吗?我在下面分享了截图和代码,请帮我做。
bookadapter.kt
class bookadapter( private var booklist:ArrayList<Booksmodel>, private val itemClickListener:
OnItemClicklistner):RecyclerView.Adapter<bookadapter.bookholder>() {
val searchText:String?=null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): bookholder {
val view=LayoutInflater.from(parent.context).inflate(R.layout.singlebook,parent,false)
return bookholder(view)
}
fun filterlist(filterlist:ArrayList<Booksmodel>){
booklist=filterlist
notifyDataSetChanged()
}
override fun onBindViewHolder(holder: bookholder, position: Int) {
val view=booklist[position]
holder.bind(view,itemClickListener)
}
override fun getItemCount(): Int {
return booklist.size
}
inner class bookholder(view: View):RecyclerView.ViewHolder(view){
val bookname:TextView=view.findViewById(R.id.recbooknametxt)
val bookpublication=view.findViewById<TextView>(R.id.recbookpubtxt)
val bookdept=view.findViewById<TextView>(R.id.recbookdepttxt)
val bookimage=view.findViewById<ImageView>(R.id.recbookimg)
fun bind(book:Booksmodel,clicklistner:OnItemClicklistner){
bookname.text=book.BookName
bookpublication.text=book.BookPublication
bookdept.text=book.Department
Picasso.get().load(book.BookImage).into(bookimage)
itemView.setOnClickListener{
clicklistner.onItemclick(book)
}
}
}
interface OnItemClicklistner{
fun onItemclick(books:Booksmodel)
}
}
books.kt
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.fragmentmenu, menu)
val searchItem = menu.findItem(R.id.search)
val searchView:SearchView = searchItem.actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
filter(newText)
return false
}
})
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id=item.itemId
when (id) {
R.id.search -> {
return true
}
R.id.sort->{
Toast.makeText(context,"sort",Toast.LENGTH_SHORT).show()
return true
}
else -> return super.onOptionsItemSelected(item)
}
}
private fun filter(text: String) {
val filteredlist = ArrayList<Booksmodel>()
for (item in booklist) {
if (item.BookName!!.lowercase(Locale.getDefault())
.contains(text.lowercase(Locale.getDefault()))
) {
filteredlist.add(item)
}
}
if (filteredlist.isEmpty()) {
Toast.makeText(context, "No Data Found..", Toast.LENGTH_SHORT).show()
} else {
bookadapter.filterlist(filteredlist)
}
}
【问题讨论】:
标签: android kotlin android-recyclerview searchview