Dans mon application, je souhaite afficher 2 députés différents avec 2 données de liste de matrices dans l'adaptateur .Mais lors de l'exécution, je reçois cette erreur.
java.lang.indexoutofboundSException: Index: 1, Taille: 0 à java.util.arraylist.get (arraylist.java:411) à gjteamcom.doubleteam.cariadapter.onbindviewholder (Cariadapter.java:58) à android.support.v7.widget.recyclerview $ adapter.onbindviewholder (recyclerview.java:6781) à android.support.v7.widget.recyClerview $ adapter.bindviewholder (recyclerview.java:6823) à android.support.v7.widget.recyClerview $ recycler.tryBindviewholderbydeadline (recyclerview.java:5752) à android.support.v7.widget.recyCllerview $ recycler.ecteurGetviewholderforPlydeAdleLine (recyclerview.java:6019) à android.support.v7.widget.recyCLERVIEW $ RECYCLER.GETVIEWFORPOSITION (RECYCLERVIEW.JAVA:5858) à android.support.v7.widget.recyCLERVIEW $ RECYCLER.GETVIEWFORPOSITION (RECYCLERVIEW.JAVA:5854) à Android.Support.v7.widget.LinearLayOutManager $ LayoutState.next (linearlayoutManager.java:2230) à android.support.v7.widget.linearlayoutmanager.layoutchunk (linearlayoutManager.java:1557) à android.support.v7.widget.linearlayoutmanager.fill (linearlayoutManager.java:1517) à android.support.v7.widget.linearlayoutmanager.onlayoutTchildren (linearlayoutManager.java:612) à android.support.v7.widget.recyclerview.dispatchlayoutStep2 (recyclerview.java:3924) à Android.Support.v7.widget.RecyCLERVIEW.DISPATCHLAYOUT (RECYCLERVIEW.JAVA:3641) à android.support.v7.widget.recyClerview.onlayout (recyclerview.java:4194) à Android.View.View.layout (vue.java:17838) à Android.View.Viewgroup.Layout (Viewgroup.java:5754) à android.widget.linearlayout.setchildframe (linearlayout.java:1982) à android.widget.linearlayout.layouetvertical (linearlayout.java:1826) à android.widget.linearlayout.onlayout (linearlayout.java:1735) à Android.View.View.layout (vue.java:17838) à Android.View.Viewgroup.Layout (Viewgroup.java:5754) à android.support.constraint.constraintLayLayOnt.onlayout (contraintlayout.java:1915) à Android.View.View.layout (vue.java:17838) à Android.View.Viewgroup.Layout (Viewgroup.java:5754) à android.widget.frameLayout.layoutchildrren (Framelayout.java:383) à android.widget.framelayout.onlayout (framelayout.java:321) à Android.View.View.layout (vue.java:17838) à Android.View.Viewgroup.Layout (Viewgroup.java:5754) à android.widget.linearlayout.setchildframe (linearlayout.java:1982) à android.widget.linearlayout.layouetvertical (linearlayout.java:1826) à android.widget.linearlayout.onlayout (linearlayout.java:1735) à Android.View.View.Layout (View.java:17838) P> BlockQuote>
Voici mon adaptateur: P>
public class CariAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ Context context; ArrayList<Cari> cari; ArrayList<CariP> carip; public CariAdapter(Context c, ArrayList<Cari> p, ArrayList<CariP> pp) { context = c; cari = p ; carip = pp; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { switch (i) { case 0: return new CariViewHolder(LayoutInflater.from(context).inflate(R.layout.cv_cari,viewGroup,false)); case 2: return new CariPViewHolder(LayoutInflater.from(context).inflate(R.layout.cv_carip,viewGroup,false)); default: return null; } } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { switch (viewHolder.getItemViewType()) { case 0: CariViewHolder cariViewHolder = (CariViewHolder) viewHolder; cariViewHolder.timnama.setText(cari.get(i).getTim_nama()); cariViewHolder.timkat.setText(cari.get(i).getTim_kategori()); Picasso.get().load(cari.get(i).getTim_image()).resize(200,200).into(cariViewHolder.timimg); break; case 2: CariPViewHolder cariPViewHolder = (CariPViewHolder) viewHolder; cariPViewHolder.akunanama.setText(carip.get(i).getAkun_nickname()); cariPViewHolder.akuninterest.setText(carip.get(i).getAkun_interest()); Picasso.get().load(carip.get(i).getAkun_profilimage()).resize(200,200).into(cariPViewHolder.akunimg); break; default: } } @Override public int getItemViewType(int position) { return position % 2 * 2; } @Override public int getItemCount() { return cari.size()+carip.size(); } class CariViewHolder extends RecyclerView.ViewHolder { TextView timnama,timkat; ImageView timimg; public CariViewHolder(@NonNull View itemView) { super(itemView); timnama = itemView.findViewById(R.id.txt_cvnamacari); timkat = itemView.findViewById(R.id.txt_cvkategori); timimg = itemView.findViewById(R.id.img_cvcari); } } class CariPViewHolder extends RecyclerView.ViewHolder { TextView akunanama,akuninterest; ImageView akunimg; public CariPViewHolder(@NonNull View itemView) { super(itemView); akunanama = itemView.findViewById(R.id.txt_cvpnamacari); akuninterest = itemView.findViewById(R.id.txt_cvpinterest); akunimg = itemView.findViewById(R.id.img_cvpcari); } }}
3 Réponses :
En supposant que les deux tableaux ont la même taille. Ensuite, vous devez obtenir la bonne position pour obtenir des données de votre tableau. I ICI représente la position de votre article de vue de recyclage mais pas la position de votre article de votre tableau Voici la fonction OnBindView
@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { switch (viewHolder.getItemViewType()) { case 0: CariViewHolder cariViewHolder = (CariViewHolder) viewHolder; cariViewHolder.timnama.setText(cari.get(i/2).getTim_nama()); cariViewHolder.timkat.setText(cari.get(i/2).getTim_kategori()); Picasso.get().load(cari.get(i/2).getTim_image()).resize(200,200).into(cariViewHolder.timimg); break; case 2: CariPViewHolder cariPViewHolder = (CariPViewHolder) viewHolder; cariPViewHolder.akunanama.setText(carip.get(i/2).getAkun_nickname()); cariPViewHolder.akuninterest.setText(carip.get(i/2).getAkun_interest()); Picasso.get().load(carip.get(i/2).getAkun_profilimage()).resize(200,200).into(cariPViewHolder.akunimg); break; default: } }
Hey, j'essaie de réparer à .get (i) à Onbindview comme vous avez dit. Mais j'ai toujours eu une erreur. java.lang.indexoutofboundSException: Index: 3, Taille: 3
Il y a deux endroits où votre code provoque des problèmes. P>
Il existe une hypothèse implicite que in Les positions ( Vous pouvez voir le problème maintenant. Ici, Vous devez remplacer les emplacements de qui aboutira à la nouvelle association: C 0 SUB>: 0, P 0 SUB>: 0 et C 1 SUB>: 1 ce qui est exactement quoi Vous voulez p> cari.size () == carip.size () code> ou
cari.size () = carip.size () + 1 code>. Vous connaissez peut-être cela. Je viens d'ajouter cela pour vous assurer de savoir à ce sujet. P> LI>
Onbindviewholder code>, vous ne pouvez pas utiliser directement code> (la position) directement. Considérez le cas lorsque
CARI code> a le contenu C 0 SUB>, C 1 SUB> et
CARIP CODE> Content P 0 < / sub>. p> li>
ol>
i code> s) associées à chaque élément seront: C 0 sub>: 0, p 0 sub>: 1 et C 1 sub>: 2. P>
carip.size () == 1 code> ce qui signifie que son indice maximum sera 0. mais la position (
i code>) utilisée dans
onbindvieholder code> sera être 1. Ce qui est hors limites. P>
i code> par
i / 2 code> dans
onbindviewholder code>. p>.
J'ai toujours eu une extraction index de l'erreur d'erreur. J'apprécie votre réponse, mais je ne comprends toujours pas comment cette méthode getitemCount () fonctionne dans 2 tailles de arraylist.
Vous avez un malentendu sur l'utilisation de différents vitypes. Votre problème est cette fonction Vous devez avoir un élément de liste unique contenant ViewType et modèle. vous suggère de lire ce article et voir comment créer itemModel p> C'est difficile à expliquer sur votre code mais ne soyez pas timide pour poser la question que je répondrai et vous aide p> p>
Votre liste de Cari et de votre carrip a-t-elle toujours la même taille?
Non, je pense qu'ils ont une taille différente, car ils sont les enfants de ma base de données (Firebase) et je souhaite l'afficher à mon application avec RecyclerView
Vous devez indexer vos listes correctement