Kotlin arrayList - 不能重写列表
我正在使用名为ItemHolder的类来保存列表中的一些对象。动态地添加一些。在某个时候,我需要清除项目(所有这些项目)以添加新项目。当我尝试从列表中获取项目时,我得到IndexOutOfBoundException。Kotlin arrayList - 不能重写列表
这里是我使用的代码:在初始化
内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()
仅用于如果您想使用现有值初始化列表并设置您提供的项目大小。在你的情况下,它intialize与0
大小列表,意味着这是这样做的正确方法:
var itemList = ArrayList<Item>()
您还可以使用
var itemList = mutableListOf<Item>()
这是完全一样的如使用ArrayList<Item>()
并应该使用,因为Kotlin可能会在稍后更改实施。
没有工作:( – MONK
如果你真的想要使用不推荐的固定索引,你可能想要在ArrayList上使用HashMap。列表的目的不是为了有一个LinkedList以外的固定索引,最好使用HashMap并删除outofboundexceptions –
在Android中不工作。也没有更新的Hashmap技术。我需要一些其他的想法。 –
Kotlin列表是不可变的。使用'mutableListOf' –
@RachitMishra它与此无关,这只是一个来自Java的标准ArrayList –
嗯!是的,我的坏!你可以发布例外吗? –