Android Kotlin arrayList-can';Don’不要重写这个名单
我使用一个名为ItemHolder的类来保存列表中的一些对象。我添加了一些。在某一点上,我需要清除项目(所有项目)以添加新项目。当我试图从列表中获取一个项目时,我会得到IndexOutOfBoundExceptionAndroid Kotlin arrayList-can';Don’不要重写这个名单,android,arraylist,collections,kotlin,Android,Arraylist,Collections,Kotlin,我使用一个名为ItemHolder的类来保存列表中的一些对象。我添加了一些。在某一点上,我需要清除项目(所有项目)以添加新项目。当我试图从列表中获取一个项目时,我会得到IndexOutOfBoundException FATAL EXCEPTION: main Process: studio.monk.rq, PID: 2812
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)
以下是我使用的代码:
内部物品持有人
var itemList : ArrayList<Item> = arrayListOf()
后来在同一节课上:
itemHolder.itemList.add(position, database.getRandomData())
以及:
问题是,当我第一次使用该类时,它运行良好,但第二次抛出异常
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=ArrayList()
你也可以使用
var itemList = mutableListOf<Item>()
var itemList=mutableListOf()
这与使用
ArrayList()
完全相同,应该使用,因为Kotlin以后可能会更改实现。Kotlin列表是不可变的。使用mutableListOf
@RachitMishra它与此无关,这只是JavaHmm中的一个标准ArrayList!是的,我的错!“你能发布例外情况吗?”拉希特·米什拉补充道。我还检查了日志,add方法出现在get之前,所以idk为什么它不会添加items这是关于代码的执行顺序。只知道几行代码是无法调试的。若您真的想使用不推荐使用的固定索引,您可能需要在ArrayList上使用HashMap。除LinkedList外,列表不具有固定索引。最好使用HashMap并消除在Android中不起作用的OutofboundException。Hashmap技术也不起作用。它不会得到更新。我需要一些其他的想法。我正在尝试使用ArrayList填充GridView。还尝试了HashMap,甚至不更新单个值。
var itemList = mutableListOf<Item>()