Kotlin arrayList: no se puede reescribir la list

Estoy usando una class llamada ItemHolder para mantener algunos objects en una list. Dinámicamente agrego algo. En cierto punto, necesito borrar los elementos (todos) para agregar nuevos. Cuando trato de get un elemento de la list, obtengo la IndexOutOfBoundException.

Aquí está el código que uso:

Inside ItemHolder

var itemList : ArrayList<Item> = arrayListOf() 

En otra class en init:

  itemHolder.itemList = arrayListOf() 

Y luego en la misma class:

 itemHolder.itemList.add(position, database.getRandomData()) 

y:

 itemHolder.getItem(position) 

El problema es que la primera vez que uso la class funciona bien, pero la segunda vez me lanza la exception.

 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) 

No define una nueva list usando arrayListOf.

Utilice ArrayList() ya que arrayListOf() solo se utiliza si desea inicializar una list con valores existentes y establecer el tamaño de los elementos que proporciona. En su caso, inicializa una list con el tamaño de 0.

Eso significa que esta es la forma correcta de hacer eso:

 var itemList = ArrayList<Item>() 

También puedes usar

 var itemList = mutableListOf<Item>() 

que es exactamente lo mismo que usar ArrayList<Item>() y debe usarse, ya que Kotlin puede cambiar la implementación más tarde.

  • Reglas de ProGuard para la reflexión de Kotlin
  • Una expresión regular que reconocería a / * ... * / note
  • ¿Qué representa el modificador sellado en Kotlin?
  • Transacciones de Jooq: las conexiones no se liberan al set, si se lanza una exception en la transacción
  • foreach en kotlin
  • Crear file desde Byte Array enviado dentro de JSON Object kotlin
  • Kotlin readBytes () nunca termina
  • Reemplazar la recostackción de la secuencia en la solución nativa de Kotlin
  • Kotlin: Dagger2 @Inject context var siempre es nulo
  • Separar cadena cada n caracteres
  • Android Studio muestra errores en layout.xml