我正在开发音乐应用程序,它的歌曲队列包含不同状态的重复歌曲(根据用户要求重复歌曲),其中一首可能处于播放状态,其他则不是()。
我已将
setHasStableIds(true)
设置为适配器并实现 getItemId
,如下所示:
override fun getItemId(position: Int): Long {
return dataset[position].songId.hashCode().toLong()
}
我也尝试过如下扩展
Song
,我认为这不是个好主意?
data class QueueSong(private val song: Song) : Song(song) {
val queueId: Int = hashCode()
}
请大家帮忙解决一下,谢谢!!
getItemId()
,则
setHasStableIds(true)
必须为每个项目返回唯一的结果。
如果根据
equals()
方法,两个对象相等,则对这两个对象调用 hashCode()
方法必须产生相同的整数结果。
重复的歌曲具有相同的
songId
,因此您执行 getItemId()
将返回相同的结果。
data class QueueSong
和 val queueId: Int = hashCode()
也不起作用,因为 Kotlin 会自动为该类生成 equals()
和 hashCode()
。具有相同 QueueSong
的重复 Song
将产生相同的哈希码。
您应该使用
queueId
之类的东西生成一个唯一的 UUID.randomUUID().toString()
,以确保它们具有唯一的哈希码。