You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ListView的setOnItemClickListener中正确获取条目值

问题根因

ListView.getItemAtPosition() 方法本质是调用对应Adapter重写的getItem()方法取值,你当前的SearchAdapter中getItem()错误返回了整型的条目位置position,因此你拿到的始终是位置值,强转为String时就会抛出ClassCastException。

修复方案

1. 修正SearchAdapter的getItem实现

将getItem()方法的返回值改为对应位置的Search条目对象:

override fun getItem(position: Int): Any {
    return searchList[position]
}

2. 修改条目点击事件的取值逻辑

拿到getItemAtPosition返回的Search对象后,再取其中存储的搜索文本字段:

listView.setOnItemClickListener { parent, view, position, id ->
     val searchItem = parent.getItemAtPosition(position) as Search
     val query = searchItem.search
     searchView?.setQuery(query, true)
}

可选简化写法:你也可以直接通过position访问Adapter的数据集,无需调用getItemAtPosition:

listView.setOnItemClickListener { _, _, position, _ ->
     val query = (listView.adapter as SearchAdapter).searchList[position].search
     searchView?.setQuery(query, true)
}

内容的提问来源于stack exchange,提问作者Pinkesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:09:03