MutableList clear() 和 addAll() 行为异常
MutableList clear() and addAll() behaves strangely
基本上我在 BaseAdapter
中使用一种方法来刷新它。它实际上适用于很多功能,但是一旦我尝试实现一个新功能并使用它的自定义方法刷新它,它就清除了控件 MutableList
。控件 MutableList 和我通过该方法传递的 MutableList 是相同的,但是我非常怀疑 Kotlin 会保持那么深的引用。所以我最终到处放置日志并发现,.clear()
调用甚至清除了我正在传递的 MutableList
。在我传递它之前甚至尝试重新初始化 MutableList
本身,所以没有任何参考的机会。
所以我想我是在问 .clear()
方法是否被正常使用,或者它实际上没有按应有的方式使用。
"The control MutableList and the MutableList I'm passing throught the method is the same, however I highly doubt Kotlin would keep reference that deep".
它确实保留了那么深的引用。引用将始终指向实例,无论它在程序中的什么位置。
如果不想影响输入列表。然后你应该复制列表内容。
我假设您有执行此行的方法。
fun setList(list: MutableList<MarketOffer>) {
this.itemsListAdapter = list // points to the same instance of MutableList
}
改用这一行
fun setList(list: MutableList<MarketOffer>) {
this.itemsListAdapter = list.toMutableList() // create a new instance of MutableList
}
您适配器中的数据列表是对您原始数据的引用。
所以如果你清除它,意味着清除你的原始列表。
如果你不想这样,你可以尝试创建一个 listOriginal
和 listDisplay
来分别操作它们。记住不要直接使用 listDisplay = listOriginal
,这会使它们再次持有相同的引用。
不要太难用这个代码就可以了
fun updateData(list :MutableList<MarketOffer>){
this.itemsListAdapter = list
this.notifyDataSetChanged()
}
基本上我在 BaseAdapter
中使用一种方法来刷新它。它实际上适用于很多功能,但是一旦我尝试实现一个新功能并使用它的自定义方法刷新它,它就清除了控件 MutableList
。控件 MutableList 和我通过该方法传递的 MutableList 是相同的,但是我非常怀疑 Kotlin 会保持那么深的引用。所以我最终到处放置日志并发现,.clear()
调用甚至清除了我正在传递的 MutableList
。在我传递它之前甚至尝试重新初始化 MutableList
本身,所以没有任何参考的机会。
所以我想我是在问 .clear()
方法是否被正常使用,或者它实际上没有按应有的方式使用。
"The control MutableList and the MutableList I'm passing throught the method is the same, however I highly doubt Kotlin would keep reference that deep".
它确实保留了那么深的引用。引用将始终指向实例,无论它在程序中的什么位置。
如果不想影响输入列表。然后你应该复制列表内容。
我假设您有执行此行的方法。
fun setList(list: MutableList<MarketOffer>) {
this.itemsListAdapter = list // points to the same instance of MutableList
}
改用这一行
fun setList(list: MutableList<MarketOffer>) {
this.itemsListAdapter = list.toMutableList() // create a new instance of MutableList
}
您适配器中的数据列表是对您原始数据的引用。 所以如果你清除它,意味着清除你的原始列表。
如果你不想这样,你可以尝试创建一个 listOriginal
和 listDisplay
来分别操作它们。记住不要直接使用 listDisplay = listOriginal
,这会使它们再次持有相同的引用。
不要太难用这个代码就可以了
fun updateData(list :MutableList<MarketOffer>){
this.itemsListAdapter = list
this.notifyDataSetChanged()
}