CloudFog API Gateway

Limited Time

200+ AI Models Integration Hub

Claim Offer Now
Resolvedandroid

Kotlin 新手求助:为什么 RecyclerView 的 SearchView 过滤功能不生效?😫

技术控Alex

8/28/2025

29 views4 likes

救命!我的RecyclerView搜索功能就是搞不定啊 😫

来自VB.NET转Kotlin的菜鸟求助!我的第一个Android应用遇到了大麻烦 - 联系人列表显示没问题,但搜索功能死活不工作...

我试过的方法

看了至少10个YouTube教程,Stack Overflow翻了20+帖子,还是卡在这里 😭 主要问题是:

  1. 搜索框输入后列表不会过滤
  2. 空结果时的Toast提示也从不显示
  3. 感觉filterList()根本没被正确调用?

当前代码状态

这是我的MainActivity关键部分(简化版):

// 搜索相关变量 private var mList = ArrayList<ContactModel>() // 原始数据 private lateinit var adapter: RCVAdapter // 适配器 private var arrayList:ArrayList<ContactModel> = arrayListOf() // 这个好像没用上? // 搜索监听器设置 searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?) = false override fun onQueryTextChange(newText: String?): Boolean { filterList(newText) // 这里确实会被调用,但过滤不生效 return true } }) // 过滤函数 - 问题可能出在这里?? private fun filterList(query: String?) { if (query != null) { val filteredList = arrayList // 这里是不是有问题? for (i in mList) { if (i.contname.lowercase(Locale.ROOT).contains(query)) { filteredList.add(i) // 添加匹配项 } } // 下面这部分好像从不会执行? if (filteredList.isEmpty()){ Toast.makeText(this,"No Contact found!", Toast.LENGTH_SHORT).show() }else{ adapter.setFilteredList(arrayList) // 这里传的参数对吗? } } }

适配器部分看起来还行:

// 适配器的关键方法 fun setFilteredList(contactList: List<ContactModel>){ this.contactList = contactList as ArrayList<ContactModel> notifyDataSetChanged() // 这个应该能刷新UI吧? }

我怀疑的问题点

  1. 是不是用了两个不同的列表变量搞混了?(mList和arrayList)
  2. filterList()里的逻辑可能有bug?
  3. 适配器绑定方式不太对?

PS: 从VB.NET转Kotlin真的不容易啊,Android开发比WinForms复杂太多了!求各位大佬救救孩子 🙏 明天就要给朋友演示这个功能了...

1 Answers

工程师老张

8/28/2025

Best Answer14

Answer #1 - Best Answer

CloudFog API Gateway 🔥 New User Special

💥 New User Offer: Get $1 Credit for ¥0.5

Claim Offer Now