java.lang.IndexOutOfBoundsException: index 2 invalide, taille 2
Scénario:-
J'ai deux ArrayList
liste contient des images
postList contient la position des images sélectionnées
maintenant, quand je suis en sélectionnant les images et appuyez sur la touche menu supprimer ,il faut supprimer les images sélectionnées .
lorsque j'exécute le code dans debug
,sa fonctionne bien et donner le désir de sortie.
mais quand je suis en l'exécutant en mode normal ,le son s'écraser et de donner ci-dessus exception
.
if (posList.size() > 0)
{
Toast.makeText(getBaseContext(), "i value" +posList.size(),
Toast.LENGTH_SHORT).show();
for (int i = 0; i < posList.size(); i++)
appAdp.list.remove(appAdp.list.get(posList.get(i)));
appAdp.notifyDataSetChanged();
posList.clear();
Toast.makeText(getBaseContext(), "You deleted selected items",
Toast.LENGTH_SHORT).show();
}
return true;
postList valeurs ici
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
boolean checked) {
posList.add(position);
d'erreur indiquant ici
appAdp.list.remove(appAdp.list.get(posList.get(i)));
logcat:-
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
pourquoi sa se comporter comme cela ,pas la moindre idée.
Merci pour toute aide.
source d'informationauteur Unknown
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'effectuer l'opération sur la Même liste de tableaux parce que, quand jamais vous enlever elemnt à partir de la liste de tableaux puis sa taille sera de réduire, donc, Vous aurez
ArrayIndexoutofBoundsException
.j'.e lorsque vous supprimer un élément de la
appAdp.list
, alors la taille de laappAdp.list
va aussi changerconsidérer si votre liste a l'origine 3 elemnts.
vous avez la position de votre posList 0,2
puis lorsque vous supprimer un élément de la
0
élément deappAdp.list
sa taille va devenir2
pour la prochaine fois, lorsque vous essayez de supprimer un élément à la position2
vous obtiendrezAIOBE
Solution:
Enregistrer tous les éléments qui doit être supprimé dans la Liste séparée et l'utilisation
removeAll(list)
méthode pour supprimer des éléments de votreappAdp.list
Exemple:
Et puis
rappelez-vous que les index sont à partir de zéro. Je pense que lorsque vous obtenez la position +1 de plus que l'indice de tableau, de sorte que vous obtenez en dehors des limites de l'exception
L'erreur est
Invalid index 2, size is 2
Problème Possible est votre
posList.size()=2
où, commeappAdp.list.size()<2
Assurez-vous que votre
appAdp.list
a plus de deux entrées.Avant de modifier la source de données de l'adaptateur, vous pouvez appeler l'adaptateur
notifyDataSetInvalidated()
à l'origine de la source de données non valide, puis d'appeler la cartenotifyDataSetChanged()
après avoir terminé la modification de la source de données.