基本上,我正在BaseAdapter
内部使用一种方法来刷新它。它实际上可用于许多功能,但是,一旦我尝试实现一个新功能并使用其自定义方法对其进行刷新,它便清除了控件MutableList
。我通过该方法传递的控件MutableList和MutableList是相同的,但是我非常怀疑Kotlin是否会继续引用那么深的内容。因此,我最终将日志放置到各处,然后发现,.clear()
调用甚至清除了我经过的MutableList
。在通过MutableList
本身之前,甚至尝试过对其进行初始化,因此没有任何形式的引用。
因此,我想问的是,是否通常使用.clear()
方法,或者实际上是否应有的方法。
答案 0 :(得分:2)
“该方法所传递的MutableList控件和MutableList控件是相同的,但是我非常怀疑Kotlin是否会继续引用那么深的内容。”
它确实使参考保持了很深的深度。引用将始终指向实例,无论它在程序中的什么位置。
如果您不想影响输入列表。然后,您应该复制列表内容。
我假设您有执行此行的方法。
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
}
答案 1 :(得分:2)
不要难,只需使用此代码并放手
fun updateData(list :MutableList<MarketOffer>){
this.itemsListAdapter = list
this.notifyDataSetChanged()
}
答案 2 :(得分:1)
适配器内的数据列表是原始数据的参考。 因此,如果清除它,则意味着清除原始列表。
如果您不希望这样做,可以尝试创建listOriginal
和listDisplay
来分别操作它们。并且请记住不要直接使用listDisplay = listOriginal
,这会使它们再次拥有相同的引用。