RecyclerView non chiama onCreateViewHolder o onBindView

Non get errori e tutti i dati sembrano validi. Per qualche ragione, vengono richiamati alcuni methods relativi alla vista. Ho assicurato quanto segue:

Ecco la dichiarazione nel frammento seguito dall'adattatore. Qualsiasi aiuto sarebbe apprezzato perché questo è completamente sconcertato.

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); } } 

  • Barra degli strumenti di supporto Android colore colorControlNormal
  • FragmenManager sostituisce l'overlay
  • C'è un'intenzione per disinstallare un'applicazione per tutti gli utenti?
  • Android "Solo il thread originale che ha creato una gerarchia di visualizzazione può toccare le sue viste" Errore nel frammento
  • Passaggio di dati da attività a frammento utilizzando Otto
  • Lollipop capitalizza il text dei pulsanti nella mia applicazione
  • 8 Solutions collect form web for “RecyclerView non chiama onCreateViewHolder o onBindView”

    Questo può anche aiutare qualcuno

    Primo utilizzo

     recyclerView.setAdapter(adapter); 

    E poi:

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

    Così apparirà così:

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

    L'ordine è invertito

    Assicurati di riciclare la vista non è figlio da nestedscrollview

    ad esempio, questo codice non funziona.

     <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> 

    allora uso,

     <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"/> 

    Non so se questo sarà utile a chiunque, ma ho quasi avuto lo stesso problema esatto. Il mio problema non era né nel frammento / class né nell'adattatore di riciclaggio. Il problema era nel layout XML padre where la barra di azione ha preso match_parent where il FrameLayout in cui è stato sostituito il frammento non ha trovato posto da mostrare. Ecco perché i methods non sono stati chiamati.

    Immagino che simili scenari potrebbero essere il caso di coloro che affrontano lo stesso problema. Doppio controllo each width e altezza in each file XML potrebbero essere nello stesso tree, in quanto il problema non sembra essere nell'adattatore a tutti.

    I miei due penny qui. Ho appena trascorso più di tre ore per eseguire il debug di questo.

    Assicurarsi di non aver usato la seguente row in modo scorretto.

    recyclerView.setHasFixedSize(true);

    Impostare la dimensione fissa solo quando si è certi che la vista avrà una dimensione costante. In caso contrario, i methods onCreateViewHolder e onBindView potrebbero non essere richiamati a tutti.

    So che questo argomento è vecchio, ma se hai fatto lo stesso errore del discente, come ho fatto, potrebbe essere utile.

    Mentre stavo studiando su un sito web di RecyclerView e copiando un codice e adattandomi al mio context, ho creato diverse variables (ad esempio utenti e dati) che wherevano fare la stessa cosa, tranne che alcuni methods chiamavano dati e alcuni chiamavano utenti . Questo è un errore facile da fare mentre si tenta di capire il codice di altri e funzionalità java (mi succede tutto il tempo).

    È bene sapere che è ansible printingre nella tua console ovunque nel tuo codice java, in modo da poter eseguire il debug come abbastanza facilmente.

    In bocca al lupo!

    Ho avuto questo stesso problema in cui non sono stati chiamati né onCreateViewHolder né onBindViewHolder. Modificare il metodo onCreateViewHolder per utilizzare il context che hai salvato un riferimento nel constructor invece di fare parent.getContext () dovresti risolvere il problema:

     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); 

    Nel mio caso ho impostato l'ID del mio RecyclerView su "recyclerView". Sembra che questo ID sia già stato definito da qualche parte, perché quando l'ho cambiato in un ID diverso, i methods dalla scheda sono stati chiamati correttamente.

    Collegamento alla risposta

    Avevo anche affrontato lo stesso problema in cui il metodo onCreateViewHolder o onBindView non si stava richiamando, solo getItemCount si stava richiamando. Quindi era fondamentalmente problema con l'altezza e il peso di RecyclerView che era impostato su wrap_content o 0dp . Dopo averlo modificato ad un certo valore, è stato risolto il problema.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.