ArrayIndexOutOfBoundsException avec le custom Android Adaptateur pour plusieurs points de vue dans la ListView
Je tente de créer un Adaptateur pour mon ListView, puisque chaque élément de la liste peut avoir un avis différent (un lien, de bascule, de radio ou de groupe), mais lorsque j'essaie d'exécuter l'Activité qui utilise la ListView j'ai un message d'erreur et l'application s'arrête. La demande est ciblée pour la plate-forme Android 1.6.
Le code:
public class MenuListAdapter extends BaseAdapter {
private static final String LOG_KEY = MenuListAdapter.class.getSimpleName();
protected List<MenuItem> list;
protected Context ctx;
protected LayoutInflater inflater;
public MenuListAdapter(Context context, List<MenuItem> objects) {
this.list = objects;
this.ctx = context;
this.inflater = (LayoutInflater)this.ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(LOG_KEY, "Position: " + position + "; convertView = " + convertView + "; parent=" + parent);
MenuItem item = list.get(position);
Log.i(LOG_KEY, "Item=" + item );
if (convertView == null) {
convertView = this.inflater.inflate(item.getLayout(), null);
}
return convertView;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return true;
}
@Override
public int getCount() {
return this.list.size();
}
@Override
public MenuItem getItem(int position) {
return this.list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
Log.i(LOG_KEY, "getItemViewType: " + this.list.get(position).getLayout());
return this.list.get(position).getLayout();
}
@Override
public int getViewTypeCount() {
Log.i(LOG_KEY, "getViewTypeCount: " + this.list.size());
return this.list.size();
}
}
L'erreur que je reçoit:
java.lang.ArrayIndexOutOfBoundsException
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:3523)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1158)
at android.widget.ListView.onMeasure(ListView.java:1060)
at android.view.View.measure(View.java:7703)
Je sais que la demande est de retour de getView
et tout semble en ordre.
Toutes les idées sur ce qui pourrait être à l'origine de ce serait appréciée.
Merci,
-Dan
- Salut Dan, êtes-vous sûr getCount le total de elementsto être affiché sur votre ListView??? public int getCount() { return this.liste.size(); }
- Ils ne pouvaient pas venir avec un moins descriptif message d'erreur...
InformationsquelleAutor Dan | 2010-04-07
Vous devez vous connecter pour publier un commentaire.
L'élément type de vue que vous êtes de retour d'
getItemViewType()
est>= getViewTypeCount()
.Accepté la réponse est correcte. C'est ce que je fais pour éviter le problème:
getItemViewType
n'étaient pas de retour de type intProblème vient quand getItemType valeur est erronée.
Cette valeur doit être un entier et doit être de 0 à getViewTypeCount()-1.
La raison, est la plus probable, car le getItemViewType méthode est de retourner des valeurs erronées!
Chaque ligne de la liste est un point de Vue. Alors que scrooling getItemViewType atteindre plus de Vue du comte.
Quoi faire? Comment éviter le problème?
D'abord déterminer vue(ligne) dans votre listview qui est affiché en premier.Pendant le Défilement utilisation de moduler l'équation
Dans cet exemple, il y a dix affichage(10 ligne).
Important
Certains utilisateurs mentionnés sur une autre question sur stackoverflow que la méthode
sur getView remplacer la méthode.