Skip to content

Snappy1

  • Home
  • Android
  • What
  • How
  • Is
  • Can
  • Does
  • Do
  • Why
  • Are
  • Who
  • Toggle search form

[FIXED] adapter – Android: crash from IndexOutOfBoundsException: length=36; index=-1

Posted on November 11, 2022 By

Solution 1 :

If you are gonna call getItem(itemHolder.getBindingAdapterPosition()) then better call it after/inside the Condition check . Which checked for invalid position .

    int adapPosition = itemHolder.getBindingAdapterPosition();
    if (adapPos == RecyclerView.NO_POSITION || recyclerItemClickListener == null) {
        return;
    }
    Card adapterItem = CardsAdapter.this.getItem(adapPosition);
    recyclerItemClickListener.onItemClick(itemHolder.cardView, adapterItem, adapPos);

Problem :

I have a RecyclerView list of CardViews. A click on the CardView loads a DetailsActivity for that CardView, using its position in the RecyclerView list. Recently a click on CardView crashed the app with an ArrayIndexOutOfBoundsException. I did click on the CardView quickly after returning to the Recycler list UI, so might this be some type of asynchronous error. Any thoughts on how to fix?

Code for the item click in the RecyclerView’s CardsAdapter:

public List<Card> mListItems;
...

public Card getItem(int position) {   
    **return mListItems.get(position);  // line 102**
}

ClickListener code in the CardsAdapter to handle the item click:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView = layoutInflater.inflate(R.layout.item_todo, parent,false);
    final ItemHolder itemHolder = new ItemHolder(itemView);   

    itemHolder.cardView.setOnClickListener(view -> {

        **Card adapterItem = CardsAdapter.this.getItem(itemHolder.getBindingAdapterPosition()); // line 639**
        int adapPos = itemHolder.getBindingAdapterPosition();
        if (adapPos == RecyclerView.NO_POSITION || recyclerItemClickListener == null) {
            return;
        }
        recyclerItemClickListener.onItemClick(itemHolder.cardView, adapterItem, adapPos);
    });
...
}

Logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.todo.quickcards, PID: 10677
java.lang.ArrayIndexOutOfBoundsException: length=36; index=-1
at java.util.ArrayList.get(ArrayList.java:439)
at com.todo.quickcards.adapter.CardsAdapter.getItem(CardsAdapter.java:102)
at com.todo.quickcards.adapter.CardsAdapter.lambda$onCreateViewHolder$0$com-todo-quickcards-adapter-CardsAdapter(CardsAdapter.java:639)
at com.todo.quickcards.adapter.CardsAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:6897)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Comments

Comment posted by AJW

Ok, got it. Should I also add a check: “if (adapterItem != -1) { recyclerItemClickListener.onItemClick(itemHolder.cardView, adapterItem, adapPos);”? }

Comment posted by AJW

revised above comment to “if (adapterItem != null)…”

Comment posted by ADM

adapterItem

Comment posted by AJW

Understood, cheers.

READ  [FIXED] android - How to constraint views/widgets to barriers using AS 3.6.3
Powered by Inline Related Posts
Android Tags:adapter, android-recyclerview

Post navigation

Previous Post: [FIXED] Unable to connect Firebase in Android Emulator for Flutter Project
Next Post: [FIXED] android – Highlight only one Card in Compose through selection

Related Posts

[FIXED] How to add if statement to MaterialBetterSpinner android Android
[FIXED] android – The dropdown view of AutoCompleteTextView displays with an error width Android
[FIXED] How to make Multiple date selector in one Date Picker in Android Studio using Java? Android
[FIXED] android – App specific storage or sq lite database for reminder app? Android
[FIXED] android – Creating a new project in React Native Android
[FIXED] java – Reload ListView from Adapter Android

Archives

  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022

Categories

  • ¿Cómo
  • ¿Cuál
  • ¿Cuándo
  • ¿Cuántas
  • ¿Cuánto
  • ¿Qué
  • Android
  • Are
  • At
  • C'est
  • Can
  • Comment
  • Did
  • Do
  • Does
  • Est-ce
  • Est-il
  • For
  • Has
  • Hat
  • How
  • In
  • Is
  • Ist
  • Kann
  • Où
  • Pourquoi
  • Quand
  • Quel
  • Quelle
  • Quelles
  • Quels
  • Qui
  • Should
  • Sind
  • Sollte
  • Uncategorized
  • Wann
  • Warum
  • Was
  • Welche
  • Welchen
  • Welcher
  • Welches
  • Were
  • What
  • What's
  • When
  • Where
  • Which
  • Who
  • Who's
  • Why
  • Wie
  • Will
  • Wird
  • Wo
  • Woher
  • you can create a selvedge edge: You can make the edges of garter stitch more smooth by slipping the first stitch of every row.2022-02-04
  • you really only need to know two patterns: garter stitch

Recent Posts

  • What color are dead flea eggs?
  • What is Indiana vine?
  • What’s the downside of a Chromebook?
  • Is phosphide the same as phosphorus?
  • Why do you need an S bend?

Recent Comments

No comments to show.

Copyright © 2023 Snappy1.

Powered by PressBook Grid Dark theme