Android 在片段中的RecycleView中实现Searchview时出现问题?
对不起,我的英语不好,但它不是我的第一语言 我有一个带有Recyclerview的片段,我正在尝试实现一个searchview来过滤数据 我试着遵循本教程-> 但是searchview根本不起作用;它不过滤任何东西 这是我在片段中实现的代码(“adat”是片段中的适配器) 这是我的适配器Android 在片段中的RecycleView中实现Searchview时出现问题?,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,对不起,我的英语不好,但它不是我的第一语言 我有一个带有Recyclerview的片段,我正在尝试实现一个searchview来过滤数据 我试着遵循本教程-> 但是searchview根本不起作用;它不过滤任何东西 这是我在片段中实现的代码(“adat”是片段中的适配器) 这是我的适配器 open class Adattattore (): RecyclerView.Adapter<RecyclerView.ViewHolder>(), Filterable { pri
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()
}
}
}
我真的很需要你的帮助,我已经在这个问题上纠缠了两天,我不知道如何解决它。请帮帮我
非常感谢,再次为我的英语不好感到抱歉请尝试调试。它穿过这条线了吗<代码>adat?.filter?.filter(p0)您遇到了什么样的错误?
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()
}
}
}
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)