如何解决androidx.appcompat.widget.SearchView无法强转为android.widget.SearchView错误
问题根因
你遇到的类型转换错误是因为布局文件和Kotlin代码中引用的SearchView不属于同一个包下的类:
- 你在
activity_main.xml里使用的是AndroidX兼容包下的androidx.appcompat.widget.SearchView - 但在MainActivity.kt中导入的是系统原生包下的
android.widget.SearchView,两者类型不匹配,运行时findViewById找到的是AndroidX的实例,强转成原生类就会抛出对应报错。
解决方法
只需要修改MainActivity.kt中的导入语句即可:
- 删掉原来的两行导入:
import android.widget.SearchView import android.widget.SearchView.OnQueryTextListener
- 替换成AndroidX包下的SearchView导入:
import androidx.appcompat.widget.SearchView
修改完成后,你声明的val searchview :SearchView会自动匹配AndroidX的SearchView类型,和布局中的控件类型一致,类型转换错误就会消失,原有搜索逻辑不需要做其他改动。
额外优化建议
从你的代码里可以看到已经引入了View Binding(存在ActivityMainBinding引用),可以直接通过绑定对象获取SearchView实例,不需要手动调用findViewById,进一步避免类似类型匹配错误:
// 替换原来的findViewById写法 binding.searchView.setOnQueryTextListener(object: SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { return false } override fun onQueryTextChange(newText: String?): Boolean { adapter.filter.filter(newText) return false } })
内容的提问来源于stack exchange,提问作者hoOHho
相关产品推荐
相关产品推荐

