Android 正在修改kotlin中列表的子对象,但列表等于未修改
我有一个这样的数据类Android 正在修改kotlin中列表的子对象,但列表等于未修改,android,kotlin,android-recyclerview,listadapter,Android,Kotlin,Android Recyclerview,Listadapter,我有一个这样的数据类 data class TestModel(val id: Int, val sentence: String , var isPlaying: Boolean) 我列出了一个可变的列表 val list: MutableList<TestModel> = arrayListOf( TestModel(1,"test",false), TestModel(2,"test2",false), TestModel(3,"test3",fals
data class TestModel(val id: Int, val sentence: String , var isPlaying: Boolean)
我列出了一个可变的列表
val list: MutableList<TestModel> = arrayListOf(
TestModel(1,"test",false),
TestModel(2,"test2",false),
TestModel(3,"test3",false))
修改列表时,例如:
list2[0].isPlaying=true
如果我检查这两个列表是否相等
print(list==list2)
修改列表中的数据时,结果将为真
我在Android ListAdapter中使用这个列表,虽然列表和旧列表一样,但适配器不会理解我做了一些修改
我怎样才能实现我想要的?
感谢您的回复在这种情况下,您还修改了原始列表的数据类。因此,如果打印两个列表,您将得到相同的结果:
列表:[TestModel(id=1,句子=test,isplay=true),TestModel(id=2,
语句=test2,isplay=false),TestModel(id=3,语句=test3,
isPlaying=false)]
清单2:[TestModel(id=1,句子=test,isplay=true),TestModel(id=2,句子=test2,isplay=false),TestModel(id=3,
语句=test3,显示=false)]
您需要为每个数据类制作一个副本,以获得所需的结果,否则您将引用原始列表中的相同数据类,并且两者将具有相同的数据
为此,如果您想要或想做这些数据类的副本,可以使用此函数:
fun MutableList<TestModel>.copyOf(): MutableList<TestModel> {
return this.map { it.copy() }.toMutableList()
}
希望这有帮助 要检查类的哪个属性?仅显示。不,我要检查整个列表。事实上,我的问题不是核对清单。android列表适配器在提交新列表时不接受相同的列表,而对象的一个属性可能已更改。问题是list1等于list2,而list2有一个索引,它的一个属性是changedhereval list2=list
复制引用,而不是列表,在list2[0]之后。isplay=true
变量list[0]。isplay
也将是true
,因为它是同一个列表(对象)。而且适配器没有观察到列表中的更改,您应该使用notifyDataSetChanged()
@IR42如果不手动notifyDataSetChange()
,是否有任何方法可以完成此操作?
fun MutableList<TestModel>.copyOf(): MutableList<TestModel> {
return this.map { it.copy() }.toMutableList()
}
val list = mutableListOf(
TestModel(1,"test",false),
TestModel(2,"test2",false),
TestModel(3,"test3",false)
)
val list2=list.copyOf()
list2[0].isPlaying=true
println(list==list2)