Android 在片段中的RecycleView中实现Searchview时出现问题?

Android 在片段中的RecycleView中实现Searchview时出现问题?,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,对不起,我的英语不好,但它不是我的第一语言 我有一个带有Recyclerview的片段,我正在尝试实现一个searchview来过滤数据 我试着遵循本教程-> 但是searchview根本不起作用;它不过滤任何东西 这是我在片段中实现的代码(“adat”是片段中的适配器) 这是我的适配器 open class Adattattore (): RecyclerView.Adapter<RecyclerView.ViewHolder>(), Filterable { pri

对不起,我的英语不好,但它不是我的第一语言

我有一个带有Recyclerview的片段,我正在尝试实现一个searchview来过滤数据

我试着遵循本教程->

但是searchview根本不起作用;它不过滤任何东西

这是我在片段中实现的代码(“adat”是片段中的适配器)

这是我的适配器



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)