Kotlin arrayList – 不能重写列表

我正在使用名为ItemHolder的类来保存列表中的一些对象。 动态地添加一些。 在某个时候,我需要清除项目(所有这些)以添加新项目。 当我尝试从列表中获取项目时,我得到IndexOutOfBoundException。

这是我使用的代码:

在ItemHolder中

var itemList : ArrayList<Item> = arrayListOf() 

在init的另一个类中:

  itemHolder.itemList = arrayListOf() 

后来在同一个班级:

 itemHolder.itemList.add(position, database.getRandomData()) 

和:

 itemHolder.getItem(position) 

问题是,当我第一次使用类,它工作正常,但第二次抛出我的例外。

 FATAL EXCEPTION: main Process: studio.monk.rq, PID: 2812 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.get(ArrayList.java:411) at studio.monk.rq.common.ItemHolder.getItem(ItemHolder.kt:9) at studio.monk.rq.fragments.MainFragment$onCreateView$vpPageChangeListener$1.onPageSelected(MainFragment.kt:44) at studio.monk.rq.fragments.MainFragment$onCreateView$1.run(MainFragment.kt:51) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

你不用arrayListOf定义一个新的列表。

使用ArrayList()因为arrayListOf()仅用于如果您想使用现有值初始化列表并设置您提供的项目的大小。 在你的情况下,初始化大小为0的列表。

这意味着这是正确的做法:

 var itemList = ArrayList<Item>() 

你也可以使用

 var itemList = mutableListOf<Item>() 

这与使用ArrayList<Item>()完全相同,应该使用,因为Kotlin可能会稍后更改实现。