2017-10-15 3 views
1

List에 개체를 저장하기 위해 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를 사용하여 새 목록을 정의하지 마십시오.

을 사용하십시오. 기존 값을 사용하여 목록을 초기화하고 사용자가 제공하는 항목의 크기를 설정하려는 경우에만 arrayListOf()이 사용됩니다.

var itemList = ArrayList<Item>() 

또한

var itemList = mutableListOf<Item>() 

을 사용할 수 있습니다 정확히 동일합니다 : 귀하의 경우에는 이것이 그렇게 적절한 방법을 의미합니다 0

의 크기의 목록을 초기화하기 ArrayList<Item>()을 사용하고 있으므로 Kotlin은 나중에 구현을 변경할 수 있으므로 사용해야합니다.

+0

작동하지 않는 경우 : ( – MONK

+1

권장되지 않는 고정 인덱스를 실제로 사용하려면 ArrayList에 대해 HashMap을 사용하는 것이 좋습니다 목록은 LinkedList를 제외한 고정 인덱스를 갖도록 설계되지 않았습니다 .HashMap 그리고 outofboundexceptions 없애 –

+0

안드로이드에서 작동하지 않습니다. 해시 맵 기법도 작동하지 않습니다. 그것은 다른 아이디어가 필요합니다. –

관련 문제