RecyclerVoir ne pas appelerCreateViewHolder ou onBindView

Ne pas avoir d'erreurs et toutes les données semblent valides. Pour une raison quelconque, les méthodes liées à la vue sont appelées. Je me suis assuré de ce qui suit:

Voici la déclaration dans le fragment suivi de l'adaptateur. Toute aide serait appréciée car cela a été complètement déconné.

SubMenuAdapter adapter = new SubMenuAdapter(getActivity(), mContentItems); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setAdapter(adapter); 
 public class SubMenuAdapter extends RecyclerView.Adapter<SubMenuAdapter.ViewHolder> { private static final String TAG = String.format("==> %S", SubMenuAdapter.class.getSimpleName()); private final List<ContentItem> mContentItems; private Context mContext; public SubMenuAdapter(Context context, List<ContentItem> contenItems) { Log.d(TAG, "Constructor called"); mContentItems = contenItems; mContext = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.d(TAG, "onCreateViewHolder called"); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_resource_efficiency, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Log.d(TAG, "onBindViewHolder called"); ContentItem item = mContentItems.get(position); holder.textName.setText(item.getName()); FontSetter.setMyriadProRegular(mContext, holder.textName); Picasso.with(mContext).load("file://" + item.getPreviewImageDefault()).into(holder.imageIcon); } @Override public int getItemCount() { Log.d(mContext, String.format("getItemCount: %d", mContentItems.size())); return mContentItems.size(); } // ViewHolder public static class ViewHolder extends RecyclerView.ViewHolder { TextView textName; ImageView imageIcon; public ViewHolder(View view) { super(view); textName = (TextView) view.findViewById(R.id.tv_resource_efficiency_option); imageIcon = (ImageView) view.findViewById(R.id.iv_resource_efficiency_icon); } } 

8 Solutions collect form web for “RecyclerVoir ne pas appelerCreateViewHolder ou onBindView”

Cela peut aussi aider quelqu'un

Première utilisation

 recyclerView.setAdapter(adapter); 

Et alors:

 recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

Donc, il ressemblera à ceci:

 recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

L'ordre est inversé

Assurez-vous que vous recyclez la vue n'est pas un enfant de la vue nestedscrollview

Par exemple, ce code ne fonctionnera pas.

 <android.support.v4.widget.NestedScrollView android:id="@+id/responder_scroll" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/darkGray" android:clipToPadding="false" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="24dp" app:cardElevation="@dimen/spacing_medium" app:cardUseCompatPadding="true"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/responder_testimonial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="Testimonial" android:textSize="@dimen/general_font_size" /> <TextView android:id="@+id/responder_counter_testimonial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/responder_testimonial" android:text="170" android:textSize="@dimen/general_font_size_small" /> <Button android:id="@+id/responder_btn_testimonial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="Go" /> <view android:id="@+id/responder_list_testimonial" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/responder_testimonial" class="android.support.v7.widget.RecyclerView"/> </RelativeLayout> </android.support.v7.widget.CardView> </FrameLayout> </android.support.v4.widget.NestedScrollView> 

Alors j'utilise,

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <view android:id="@+id/responder_list_testimonial" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/responder_testimonial" class="android.support.v7.widget.RecyclerView"/> 

Je ne sais pas si cela aidera quelqu'un, mais j'ai presque eu le même problème. Mon problème n'était ni dans le fragment ni dans la classe, ni dans l'adaptateur de recyclage. Le problème était dans la disposition XML parentale où la barre d'action a pris match_parent où le FrameLayout dans lequel le fragment est remplacé- n'a pas FrameLayout endroit disponible pour être affiché. C'est pourquoi les méthodes n'ont pas été appelées.

Je suppose que des scénarios similaires pourraient être le cas pour ceux qui sont confrontés au même problème. Vérifiez chaque largeur et toute hauteur dans chaque fichier XML dans le même arbre, car le problème ne semble pas être dans la carte.

Mes deux penny ici. Juste passé plus de trois heures à déboguer cela.

Assurez-vous que vous n'avez pas utilisé la ligne suivante négligemment.

recyclerView.setHasFixedSize(true);

Réglez la taille fixe uniquement lorsque vous êtes sûr que la vue aurait une taille constante. Dans le cas contraire, les méthodes onCreateViewHolder et onBindView pourraient ne pas être appelées du tout.

J'ai eu ce même problème où ni onCreateViewHolder ni onBindViewHolder n'étaient appelés. Modification de votre méthode onCreateViewHolder pour utiliser le contexte dans lequel vous avez enregistré une référence dans le constructeur au lieu de faire parent.getContext () devrait le réparer:

 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.d(TAG, "onCreateViewHolder called"); View view = LayoutInflater.from(mContext).inflate(R.layout.row_resource_efficiency, parent, false); return new ViewHolder(view); 

Dans mon cas, j'ai configuré l'ID de mon RecyclerView pour "recyclerView". Il semble que cette ID ait déjà été définie quelque part, car lorsque j'ai changé cette identification, les méthodes de l'adaptateur ont été appelées correctement.

Lien vers la réponse

J'étais également confronté au même problème où la méthode onCreateViewHolder ou onBindView ne faisait pas l'objet d'une getItemCount , seuls getItemCount était invoqué. Donc, c'était essentiellement un problème avec la taille et le poids de RecyclerView qui était configuré pour wrap_content ou 0dp . Après avoir changé à une certaine valeur, le problème est résolu.

Je sais que ce sujet est vieux, mais si vous avez commis la même erreur d'apprenant, comme vous l'avez fait, vous pourriez trouver cela utile.

Alors que j'étudiais sur un site Web sur RecyclerView et que j'ai copié un code et je me suis adapté à mon contexte, j'ai créé différentes variables (par exemple, les utilisateurs et les données) qui étaient censées faire la même chose, sauf que certaines méthodes appelaient des données et d'autres appelaient les utilisateurs . C'est une erreur facile à faire car vous essayez de comprendre le code et la fonctionnalité java de l'autre (il me arrive tout le temps).

Il est bon de savoir que vous pouvez imprimer dans votre console n'importe où dans votre code java, afin que vous puissiez déboguer comme ça très facilement.

Bonne chance!

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.