【问题标题】:Kotlin arrayList - can't rewrite the listKotlin arrayList - 无法重写列表
【发布时间】:2018-03-27 00:52:35
【问题描述】:

我正在使用一个名为 ItemHolder 的类来保存 List 中的一些对象。我动态地添加了一些 .在某个时候,我需要清除项目(所有项目)以添加新项目。当我尝试从列表中获取项目时,我得到了 IndexOutOfBoundException 。

这是我使用的代码:

在ItemHolder里面

    var itemList : ArrayList<Item> = arrayListOf()

在 init 的另一个类中:

    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)

【问题讨论】:

  • Kotlin 列表是不可变的。使用mutableListOf
  • @RachitMishra 与此无关,这只是 Java 的标准 ArrayList
  • 嗯!是的,我的坏!你能发布例外吗?
  • @Rachit Mishra 已添加。我还检查了日志,添加方法出现在 get so idk 为什么它不会添加项目之前
  • 这是关于你的代码的执行顺序。只知道几行代码是无法调试的。

标签: android arraylist collections kotlin


【解决方案1】:

您没有使用 arrayListOf 定义新列表。

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

这意味着这是正确的做法:

var itemList = ArrayList<Item>()

你也可以使用

var itemList = mutableListOf<Item>() 

这与使用 ArrayList&lt;Item&gt;() 完全相同,应该使用,因为 Kotlin 可能会在以后更改实现。

【讨论】:

  • 如果你真的想使用不推荐的固定索引,你可能想在 ArrayList 上使用 HashMap。除了 LinkedList,List 没有设计为具有固定索引。更好地使用 HashMap 并摆脱 outofboundexceptions
  • 无法在 Android 中运行。 Hashmap 技术也不起作用。它没有得到更新。我需要一些其他的想法。
  • 我正在尝试使用 ArrayList 填充 GridView。也试过HashMap,连一个值都不更新。
猜你喜欢
  • 2022-05-13
  • 2020-06-28
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多