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可能会稍后更改实现。