2017-10-15 95 views
1

我正在使用名为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) 
+0

Kotlin列表是不可变的。使用'mutableListOf' –

+1

@RachitMishra它与此无关,这只是一个来自Java的标准ArrayList –

+0

嗯!是的,我的坏!你可以发布例外吗? –

回答

0

您不使用arrayListOf定义新列表。

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

大小列表,意味着这是这样做的正确方法:

var itemList = ArrayList<Item>() 

您还可以使用

var itemList = mutableListOf<Item>() 

这是完全一样的如使用ArrayList<Item>()并应该使用,因为Kotlin可能会在稍后更改实施。

+0

没有工作:( – MONK

+1

如果你真的想要使用不推荐的固定索引,你可能想要在ArrayList上使用HashMap。列表的目的不是为了有一个LinkedList以外的固定索引,最好使用HashMap并删除outofboundexceptions –

+0

在Android中不工作。也没有更新的Hashmap技术。我需要一些其他的想法。 –