Voglio che il mio RecyclerView non riloops alcuni articoli

Sto utilizzando un RecyclerView con viste eterogenee all'interno, come si vede in questo tutorial .

Ho alcuni elementi all'interno di questo RecyclerView che sono anche RecyclerViews. Troppo difficile da immaginare? Diciamo che voglio copiare il layout di Play Store: un grande RecyclerView con layout lineare verticale e riempito da molti elementi: singole applicazioni e giostra di applicazioni.

  • Come mostrare le icone nel menu di overflow di ActionBar?
  • Le size dello schermo e la dimensione dello schermo di Samsung S I9000 di Android
  • RecyclerView: Incongruenza rilevata. Posizione di elemento non valida
  • Qual è la NoSaveStateFrameLayout?
  • È ansible scorrere un ScrollView con un ConstraintLayout in modalità Blueprint?
  • Come posso impostare gli spazi dei nomi personalizzati nel file di layout nello studio Android?
  • Se l'elemento da aggiungere è il layout di una singola applicazione, verrà utilizzata l'ID 1 e aggiungerò il layout per un singolo elemento. Altrimenti, se devo aggiungere un Carosello, aggiungerò un elemento al principale RecyclerView: un altro RecyclerView con un proprio adattatore.

    Questo funziona molto bene. Ad exception di quando si scorra il principale RecyclerView. Perché? Poiché alcune viste vengono distrutte quando non sono più visibili e ricreate nel metodo onBindViewHolder() . Perché qui? Poiché l'adattatore del principale RecyclerView passa per la posizione X e chiama OnBindViewHolder() . Questi ultimi creano quindi un nuovo RecyclerView con un proprio adattatore e lo assegna. Vorrei mantenere queste opinioni solo perché sono pesanti per reinflate each volta.

    È ansible? Se è così, puoi dirmi come?

  • Altitudine non funzionante su LinearLayout
  • Perché DrawerLayout talvolta presenta problemi all'apertura?
  • Android - utilizzare l'image di profilo esterna nella barra di notifica come Facebook
  • Quando si aggiunge la visualizzazione alla window con WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, non viene visualizzato un evento di contatto
  • Ingrandire lo zoom con ScrollView: aggiorna il suo cursore di scorrimento quando le size del figlio cambiano
  • get il numero di telefono in formato XXX-XXX-XXXX dalla casella edittext in android
  • 2 Solutions collect form web for “Voglio che il mio RecyclerView non riloops alcuni articoli”

    Usa questo:

     recyclerView.getRecycledViewPool().setMaxRecycledViews(TYPE_CAROUSEL, 0); 

    Questo non ricicla alcuna vista di tipo TYPE_CAROUSEL di TYPE_CAROUSEL ma se il numero di elementi di questo tipo è molto alto, ridurrà in modo significativo le performance, forse anche causa OOME

    EDIT

    Dopo aver letto la risposta di MML13 , penso che potrebbe funzionare per te. Sei preoccupato per la reinfiltrazione di elementi del tuo carosello quando la vista viene riblogita nel recyclerView esterno. Se tutti questi caroselli sono dello stesso tipo, cioè tutti utilizzano la stessa scheda, è ansible mantenere l'adattatore all'interno di ViewHolder esterno di RecyclerView e solo scambiare dati e call notifyDataSetChanged() o notifyItemRangeChanged(...) su questa scheda quando viene riblogita . Ciò ricicla tutte le viste di carosello e tutte le viste all'interno di questi caroselli.

    Poiché alcune viste vengono distrutte quando non sono più visibili e ricreate nel metodo onBindViewHolder ().

    Non è vero, non sono più creati, semplicemente ribadiscono. se si dispone di una vista per la posizione X (in rottami o recycler) RecyclerView utilizzerà e lo ribadisce.

    Vorrei mantenere queste opinioni solo perché sono pesanti per reinflate each volta.

    Il principale RecyclerView mantiene quelli per te. Devi solo modificare i dati dell'adattatore del secondo RecyclerView e call notifyDataSetChanged . Memorizza anche la seconda Adattatore RecyclerView all'interno della viewHolder di viewHolder del tuo RecyclerView principale.

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