如何在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
相关产品推荐
相关产品推荐

