在片段中在RecycleView中实现Searchview是否有问题?

时间:2019-09-18 08:59:32

标签: android android-fragments kotlin

对不起,我的英语不好,但这不是我的母语。

我有一个带有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天,而且我不知道该如何解决。请帮助我

非常感谢,再次抱歉我的英语不好

0 个答案:

没有答案