我正在使用一个名为 ItemHolder 的类来保存 List 中的一些对象。我动态地添加了一些 .在某个时候我需要清除项目(所有项目)以添加新项目。当我尝试从列表中获取项目时,我得到了 IndexOutOfBoundException 。
这是我使用的代码:
在 ItemHolder 内部
var itemList : ArrayList<Item> = arrayListOf()
在初始化的另一个类中:
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 稍后可能会更改实现。
关于android - Kotlin arrayList - 无法重写列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46754421/