对不起,我的英语不好,但这不是我的母语。
我有一个带有Recyclerview的片段,我正在尝试实现一个searchview来过滤数据。
我尝试按照本教程进行操作-> https://www.youtube.com/watch?v=sJ-Z9G0SDhc&
但是searchview不能正常工作;它不会过滤任何东西。
这是我在片段中实现的代码(“ adat”是片段中的适配器)
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
val vista2 = inflater.inflate(R.menu.main, menu)
var searchItem : MenuItem? = menu?.findItem(R.id.searchView)
var searchView : SearchView = MenuItemCompat.getActionView(searchItem) as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(p0: String?): Boolean {
return false
}
override fun onQueryTextChange(p0: String?): Boolean {
adat?.filter?.filter(p0)
return false
}
})
//super.onCreateOptionsMenu(menu, inflater)
}
这是我的适配器
open class Adattattore (): RecyclerView.Adapter<RecyclerView.ViewHolder>(), Filterable {
private var list : ArrayList<TecnicheData>? = null
private var listFull : ArrayList<TecnicheData>? = null
private var contesto : Context? = null
private var recycleFilter : RecycleFilter?= null
var link : String? ? = null
constructor(context: Context, list : ArrayList<TecnicheData>) :this(){
this.listFull = list
this.list = list
this.contesto = context
}
inner class ViewHolder( view: View) : RecyclerView.ViewHolder(view){
var imgItemImage : ImageView ?= null
var txtItemName : TextView?= null
init{
imgItemImage = view.findViewById(R.id.imageViewTec)
txtItemName = view.findViewById(R.id.textViewTec)
view.setOnClickListener {
Snackbar.make(view, "Value $link",
Snackbar.LENGTH_LONG)
.show()
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ViewHolder(LayoutInflater.from(contesto).inflate(R.layout.item_tecniche_list, parent, false))
}
override fun getItemCount(): Int {
return 2 //temporary hard coded value
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
var holder0 : ViewHolder = holder as ViewHolder
holder0.imgItemImage?.setImageResource(list?.get(position)?.imgInt as Int)
holder0.txtItemName?.text = list?.get(position)?.titolo
link = list?.get(position)?.videoUrl
}
override fun getFilter(): Filter {
if(recycleFilter == null)
recycleFilter = RecycleFilter()
return recycleFilter as RecycleFilter
}
inner class RecycleFilter : Filter(){
override fun performFiltering(p0: CharSequence?): FilterResults {
var results : FilterResults = FilterResults()
var filtrata : ArrayList<TecnicheData>? = null
if(p0 != null && p0.length >0){
var localList1 : ArrayList<TecnicheData> = ArrayList<TecnicheData>()
var pattern = p0.toString().toLowerCase().trim()
for(i : Int in 0..listFull?.size?.minus(1) as Int){
if(listFull?.get(i)?.titolo?.toLowerCase()?.contains(pattern) as Boolean){
localList1.add(listFull?.get(i) as TecnicheData)
}
}
results.values = localList1
results.count = localList1.size
}else{
results.values = listFull
results.count= listFull?.size as Int
}
return results
}
override fun publishResults(p0: CharSequence?, p1: FilterResults?) {
list?.clear()
list = p1?.values as ArrayList<TecnicheData>
notifyDataSetChanged()
}
}
}
为了更好地理解,这是我的“ TecnicheData”类
data class TecnicheData(var id: String? = null, var titolo: String? = null, var videoUrl: String? = null, var imgUrl: String? = null, var categoria: String? = null, var imgInt : Int? = null)
我真的很需要您的帮助,我已经在这个问题上停留了2天,而且我不知道该如何解决。请帮助我
非常感谢,再次抱歉我的英语不好