android - Kotlin arrayList - 无法重写列表

标签 android arraylist collections kotlin

我正在使用一个名为 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/

相关文章:

java - 开箱即用的 Java 直接比较器

Java 泛型 : Does "T2 extends T1" imply "T1 super T2"?

android - 在不同操作系统上使用 Android Studio 项目

java - 基于 libGDX 的引擎 (for android)

java - 如何在List/ArrayList中查找出现的位置

java - 在对象构造期间向 ArrayList 添加元素的最佳实践?

java - 我们为什么需要 ArrayList 构造函数中的 super() 呢?

android - 抽屉布局在没有导航 Controller 的情况下不起作用

android - android-phonegap 中网络 worker 的替代方案?

java - Android,ArrayList 中的 ImageView 对象