Android中向Adapter添加列表时出现类型不匹配错误
问题原因与解决办法
错误核心
报错的本质是类型不匹配:
- 你传给
adapter.submitList()的是MutableList<String>(仅包含歌曲名称的字符串列表) - 但你的Adapter要求传入的是
(Mutable)List<SongInfo!>?(SongInfo类型的对象列表)
你的代码里,songResources.keys.toMutableList()获取的是HashMap的键集合——也就是你定义的歌曲名字符串("Dark Star"、"What's Mine"),这和Adapter期望的SongInfo对象类型完全不符,所以触发类型错误。
解决思路
方案1:传递Adapter需要的SongInfo对象列表(推荐)
直接获取HashMap中的SongInfo对象集合,转成列表后传给Adapter:
private val repository = Repository() private var songResources = repository.fetchData() // 取values而非keys,得到SongInfo类型的集合 private var songList = songResources.values.toMutableList() adapter.submitList(songList)
方案2:适配Adapter为接收字符串列表
如果你的业务只需要展示歌曲名称,可修改Adapter的泛型参数,使其支持接收List<String>。比如将RecyclerView Adapter的泛型对应数据部分改为String(具体修改需结合你的Adapter实现)。
若不想修改Adapter,也可以将歌曲名包装成SongInfo对象(不推荐,属于冗余操作):
private var songList = songResources.keys.map { songName -> SongInfo(songName, 0, "") // 根据实际需求补全默认参数 }.toMutableList() adapter.submitList(songList)
内容的提问来源于stack exchange,提问作者user19862929
相关产品推荐
相关产品推荐

