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
}

您适配器中的数据列表是对您原始数据的引用。 所以如果你清除它,意味着清除你的原始列表。

如果你不想这样,你可以尝试创建一个 listOriginallistDisplay 来分别操作它们。记住不要直接使用 listDisplay = listOriginal,这会使它们再次持有相同的引用。

不要太难用这个代码就可以了

fun updateData(list :MutableList<MarketOffer>){
    this.itemsListAdapter = list
    this.notifyDataSetChanged()
}