Estoy usando un RecyclerView y recuperación de objetos de una API en lotes de diez. Para la paginación, yo uso EndlessRecyclerOnScrollListener.

Todo funciona correctamente. Ahora todo lo que queda es añadir un progreso spinner en la parte inferior de la lista, mientras que el siguiente lote de objetos se recuperan por la API. Aquí está una captura de pantalla de la aplicación Google Play Store, mostrando un ProgressBar en lo que seguramente es un RecyclerView:

Infinitas RecyclerView con ProgressBar para la paginación

El problema es que ni el RecyclerView ni la EndlessRecyclerOnScrollListener se han incorporado en un soporte para ver una ProgressBar en la parte inferior, mientras que el siguiente lote de objetos obtenido.

Ya he visto las siguientes respuestas:

1. Poner un indeterminado ProgressBar como pie de página en un RecyclerView cuadrícula.

2. la Adición de elementos a un Sinfín de Desplazamiento RecyclerView con ProgressBar en la parte inferior.

No estoy satisfecho con las respuestas a esas preguntas (tanto por la misma persona). Esto implica acondicionando un null objeto en el conjunto de datos a mitad de camino mientras el usuario se desplaza y, a continuación, tomar hacia fuera después de que el siguiente lote se entrega. Parece un hack que deja de lado el principal problema que puede o no puede trabajar correctamente. Y hace un poco de sacudidas y de distorsión en la lista

Utilizando SwipeRefreshLayout no es una solución aquí. SwipeRefreshLayout implica tirar de la parte superior para ir a buscar el más reciente elementos, y no muestra una vista de progreso de todos modos.

Por favor alguien puede proporcionar una buena solución para esto? Estoy interesado en saber cómo Google ha implementado este para sus propias aplicaciones (la app de Gmail tiene demasiado). Hay artículos donde esto se muestra en detalle? Todas las respuestas & comentarios serán apreciados. Gracias.

Algunas otras referencias:

1. Paginación con RecyclerView. (Excelente resumen …)

2. RecyclerView encabezado y pie de página. (Más de lo mismo …)

3. Infinita RecyclerView con ProgressBar en la parte inferior.

  • OK – me preguntó la pregunta 2 u de referencia y hasta ahora no puedo encontrar una mejor solución a lo que fue propuesto por Vilen. También he utilizado su solución en un par de actividades que contiene recyclerview con ningún problema en absoluto. Que yo sepa no hay soporte para progressBar en un recyclerview como google construido como una vainilla opción para los desarrolladores sin construido en campanas y silbatos así que si quieres campanas y silbidos que usted necesita para realizarlos en el recyclerview a ti mismo. Hay una razón por la que están dudando Vilen del código y que ha habido casos en que no ha funcionado para usted?
  • Bien, voy a explicar en más detalle … el uso de notifyItemInserted() y notifyItemRemoved() mientras el usuario se desplaza lleva a algunos rezagados y discordante efectos en la lista. Esto siempre ocurre con este enfoque, especialmente cuando el usuario arroja de la lista. Google apps muestran el spinner en sus listas paginadas demasiado, pero sin ningún tipo de rezagados o cambio de los elementos de la lista. Mi conclusión es que han utilizado algún otro método que no implique la adición de un null objeto en el conjunto de datos a mitad de camino mientras el usuario se desplaza … así que estoy interesado en su solución … 🙂
  • Así que el ‘null’ objeto que se utiliza es un poco de un problema – yo no lo uso, he añadido un campo adicional llamado ‘viewType’ dentro de mi objeto arrayList y establezca su valor a «progressBar’. En mi adaptador del ‘getItemViewType’ método, puedo recuperar el objeto ‘viewType’ y, a continuación, utilizarlo para determinar la vista que me debe mostrar, si es normal que recyclerview vista o un progressBar. Esto ayuda a prevenir nullpointerexceptions. No he experimentado ningún rezagado o jagging efectos cuando se desplaza. Si quieres probar por ti mismo, prueba este repo he hecho: github.com/Winghin2517/ReverseLayoutRecyclerview
  • La repo es para un reverseLayoutRecyclerview con su código en el interior, pero es invertida recyclerview que sólo contiene 3 elementos del interior de la recyclerview. Puede quitar la parte del código donde se va a agregar más de 15 artículos si se desplaza hacia arriba para que sea más funcional.
  • Gracias por su código … voy a probarlo … 🙂
  • si usted no desea hackear el adaptador, vamos a getItemCount devolver el real tamaño de + 1, mientras que usted está esperando para la siguiente página, usted podría intentar agregar el control de giro por debajo de la RecyclerView en el diseño y cambiar su visibilidad en consecuencia. Yo uso el segundo enfoque deje que la rueda se superponen el último elemento visible (con un fondo semitransparente)
  • que suena como un enfoque interesante, Blackbelt … déjame probarlo y ver si funciona … 🙂
  • Podría alguien preguntar CommansWare para responder a esta pregunta apuesto a que él tiene una buena solución para este problema
  • he probado este enfoque también. no buscar el mejor!! podría intentarlo dentro de un snack-bar si eso es aún posible.
  • así que, finalmente, ¿cuál es la solución que usted eligió?

InformationsquelleAutor Y.S | 2015-12-23

8 Comentarios

  1. 15

    AQUÍ ES MÁS SIMPLE Y MÁS LIMPIO ENFOQUE.

    Implementar un Sinfín de Desplazamiento de esta Guía Codepath y, a continuación, siga los pasos siguientes.

    1. Agregar la barra de progreso debajo de la RecyclerView.

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_movie_grid"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:paddingBottom="50dp"
            android:clipToPadding="false"
            android:background="@android:color/black"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
        </android.support.v7.widget.RecyclerView>
    
        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="invisible"
            android:background="@android:color/transparent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    Aquí android:paddingBottom=»50dp» y android:clipToPadding=»false» son muy importantes.

    2. Obtener una referencia a la barra de progreso.

    progressBar = findViewById(R.id.progressBar);

    3. Definir métodos para mostrar y ocultar la barra de progreso.

    void showProgressView() {
        progressBar.setVisibility(View.VISIBLE);
    }
    
    void hideProgressView() {
        progressBar.setVisibility(View.INVISIBLE);
    }
    • simple y elegante
    • esto debe ser aceptado respuesta! Bueno!!!!!
    • Esto es fantástico. Probado y comprobado. Funciona a la perfección!
  2. 16

    He implementado esta en mi antiguo proyecto, yo lo hice de la siguiente manera…

    He creado un interface como los chicos de sus ejemplos hicieron

    public interface LoadMoreItems {
      void LoadItems();
    }

    Luego añadir añadido un addOnScrollListener() en mi Adapter

     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView,
                                       int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
    
                    totalItemCount = linearLayoutManager.getItemCount();
                    lastVisibleItem = linearLayoutManager
                            .findLastVisibleItemPosition();
                    if (!loading
                            && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                        //End of the items
                        if (onLoadMoreListener != null) {
                            onLoadMoreListener.LoadItems();
                        }
                        loading = true;
    
                    }
                }
            });

    La onCreateViewHolder() es donde pongo el ProgressBar o no.

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                      int viewType) {
        RecyclerView.ViewHolder vh;
        if (viewType == VIEW_ITEM) {
            View v = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.list_row, parent, false);
    
            vh = new StudentViewHolder(v);
        } else {
            View v = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.progressbar_item, parent, false);
    
            vh = new ProgressViewHolder(v);
        }
        return vh;
    }

    En mi MainActivity que es donde pongo el LoadItems() para agregar otros elementos es :

    mAdapter.setOnLoadMoreListener(new LoadMoreItems() {
            @Override
            public void LoadItems() {
                DataItemsList.add(null);
                mAdapter.notifyItemInserted(DataItemsList.size() - 1);
    
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //  remove progress item
                        DataItemsList.remove(DataItemsList.size() - 1);
                        mAdapter.notifyItemRemoved(DataItemsList.size());
                        //add items one by one
                        //When you've added the items call the setLoaded()
                        mAdapter.setLoaded();
                        //if you put all of the items at once call
                        //mAdapter.notifyDataSetChanged();
                    }
                }, 2000); //time 2 seconds
    
            }
        });

    Para más información seguí este repositorio de Github(Nota: este es el uso de AsyncTask tal vez sea útil mi respuesta, ya que yo lo hice manualmente y no con los datos de API pero debería funcionar también) también este post fue útil para mí sin fin-recyclerview-con-barra de progreso

    También no sé si lo denominado pero también he encontrado este post infinite_scrolling_recyclerview, tal vez también podría ayudar a usted.

    Si no es lo que usted está buscando, avísame y dime lo que está mal con este código y voy a tratar de modificarlo a su gusto.

    Espero que ayude.

    EDITAR

    Ya que no desea eliminar un elemento… yo me imagino a un hombre que se quita la footer sólo en este post : diseño-android-sin fin-recyclerview.

    Esto es para ListView pero sé que se puede adaptar a RecyclerView él no la eliminación de cualquier elemento que acaba de poner Visible/Invisible la ProgressBar a echar un vistazo : detección de-fin-de-listview

    También echar un vistazo a : esta pregunta android-aplicación-progressbar-y-carga-para-fin-lista-como-android

    • Gracias …. este es el enfoque que estoy tratando de evitar, como no me quieren agregar y quitar elementos, mientras que el desplazamiento está en progreso … 🙂
    • Pero sólo la puedes quitar el progreso que cuenta como un elemento, has probado?
    • Sí … que agregar y quitar el objeto nulo … estoy tratando de evitar que como se hace que la lista de jitter … de Google apps no parecen utilizar este enfoque … 🙂
    • Véase mi edición de @Y. S. acabo de añadir algunos ejemplos 🙂
    • Lo siento por responder tarde, Skizo … estoy estudiando los enlaces que proporcionan … 🙂
    • No se preocupe maestro, si usted me necesita para mejorar la respuesta o algo, hágamelo saber y voy a ser feliz de hacerlo 🙂 o si quieres puedo poner una recompensa por esta pregunta a ver si alguien con más conocimientos que puede resolver tu problema 😀
    • Gracias por tus esfuerzos … estoy trabajando para encontrar una mejor solución a esto … 🙂
    • Encontraste algo mejor? Si no, siéntase libre de compartir conmigo si quieres.. me gustaría saber cómo hacerlo así más eficiente 😛
    • Me hizo ir a través de los enlaces que proporcionan … Blackbelt la sugerencia es también interesante … todavía estoy trabajando en una solución adecuada … Se actualizará una vez que he acabado … Siéntase libre de cambiar o modificar cualquier parte de este post, como te deseo … 🙂
    • Maestro ¿resolverlo?
    • Todavía no hay ninguna solución perfecta … 🙂
    • También estoy mirando para el mismo.. Pero después de leer estos comentarios, es como no suerte!
    • Muy Clara La Respuesta
    • Gracias 😀
    • Encontraste alguna solución mejor para él?
    • Y cuando loading = false?

  3. 5

    Hay otra manera de hacer esto.

    • Primero el adaptador del getItemCount devuelve listItems.size() + 1
    • volver VIEW_TYPE_LOADING en getItemViewType() para position >= listItems.size(). De esta manera el cargador sólo se muestra al final de la recicladora en la vista de lista. El único problema con esta solución es que incluso después de llegar a la última página, el cargador se muestra, así, en orden a la revisión de almacenar la x-pagination-total-count en el adaptador, y
    • a continuación, cambiar la condición para devolver el tipo de vista a

      (position >= listItem.size())&&(listItem.size <= xPaginationTotalCount) .

    Me acaba de llegar con esta idea ahora ¿qué te parece?

    • funciona correctamente ? sin quedando & distorsión ?
    • ¿por qué hay ser cualquier distorsión no hay como 2 condición de cheques para obtener cada elemento de tipo de vista de los inconvenientes de esta lógica no es la eficiencia, pero en escenarios donde la red de solicitud de la página siguiente falla, entonces el cargador icono aún sería que se muestra al final de la lista
    • Gracias por tus esfuerzos … voy a probar esto … 🙂
    • Yo ya lo hice, pero sin la paginación recuento máximo de la verificación y el retroceso cuando la solicitud de red falla >.>, de todos modos sus suaves y sin distorsión ni nada
  4. 3

    Me gusta la idea de añadir una vista de progreso titular de un adaptador, pero tiende a llevar a algunos feo de la lógica de la manipulación para conseguir lo que quieres. La vista del titular de enfoque obliga a protegerse contra el pie de página adicional elemento por juguetear con los valores de retorno de getItemCount(), getItemViewType(), getItemId(position) y cualquier tipo de getItem(position) método que puede que desee incluir.

    Un enfoque alternativo es la gestión de la ProgressBar de visibilidad en el Fragment o Activity nivel de mostrar u ocultar la ProgressBar debajo de la RecyclerView cuando se inicia la carga y termina respectivamente. Esto se puede lograr mediante la inclusión de la ProgressBar directamente en la vista diseño o mediante la adición a una costumbre RecyclerView ViewGroup clase. Esta solución se conducen generalmente a menos mantenimiento y menos bugs.

    ACTUALIZACIÓN: Mi sugerencia plantea un problema cuando se desplaza la vista hacia arriba, mientras que el contenido se está cargando. El ProgressBar se adhieren a la parte inferior de la vista de diseño. Esto probablemente no es el comportamiento que usted quiere. Por esta razón, la adición de una vista de progreso titular para el adaptador es probablemente el mejor, solución funcional. Simplemente no se olvide de proteger su elemento descriptor de acceso de métodos. 🙂

    • Sí, eso también está bien, creo. Es similar a la de encabezado y pie de página del concepto en la vista de lista, haga?
    • He actualizado mi respuesta con un fragmento de código para aclarar mi sugerencia.
  5. 3

    aquí está mi solución sin la adición de un artículo falso (en Kotlin, pero simple):

    en su adaptador de añadir:

    private var isLoading = false
    private val VIEWTYPE_FORECAST = 1
    private val VIEWTYPE_PROGRESS = 2
    
    override fun getItemCount(): Int {
        if (isLoading)
            return items.size + 1
        else
            return items.size
    }
    
    override fun getItemViewType(position: Int): Int {
        if (position == items.size - 1 && isLoading)
            return VIEWTYPE_PROGRESS
        else
            return VIEWTYPE_FORECAST
    }
    
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
        if (viewType == VIEWTYPE_FORECAST)
            return ForecastHolder(LayoutInflater.from(context).inflate(R.layout.item_forecast, parent, false))
        else
            return ProgressHolder(LayoutInflater.from(context).inflate(R.layout.item_progress, parent, false))
    }
    
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
        if (holder is ForecastHolder) {
            //init your item
        }
    }
    
    public fun showProgress() {
        isLoading = true
    }
    
    
    public fun hideProgress() {
        isLoading = false
    }

    ahora puede llamar fácilmente a showProgress() antes de la llamada a la API. y hideProgress() después de la llamada a la API se hace.

  6. 0

    Esta solución es inspirada por Akshar Patels solución en esta página. La he modificado un poco.

    1. Cuando la carga de las primeras cosas que se ve bien para tener el control ProgressBar centrado.

    2. No me gusta el resto de vacío relleno en la parte inferior en el que no existían más elementos para la carga. Que ha sido eliminado con esta solución.

    Primera XML:

    <android.support.v7.widget.RecyclerView
        android:id="@+id/video_list"
        android:paddingBottom="60dp"
        android:clipToPadding="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    
    </android.support.v7.widget.RecyclerView>
    
    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyle"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    Luego he añadido la siguiente programación.

    Cuando los primeros resultados se han cargado, agregar esto a su onScrollListener. Mueve la barra de progreso, desde el centro hasta la parte inferior:

    ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) loadingVideos.getLayoutParams();
    layoutParams.topToTop = ConstraintLayout.LayoutParams.UNSET;
    loadingVideos.setLayoutParams(layoutParams);

    Cuando no hay más elementos existen, retire el relleno en la parte inferior como este:

    recyclerView.setPadding(0,0,0,0);

    Ocultar y mostrar su ProgressBar como de costumbre.

    • Esto no es trabajo.
  7. 0

    Puede utilizar layout_above etiqueta en recycleView como este:

    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginLeft="16dp"
                        android:layout_marginRight="16dp"
                        android:orientation="vertical">
                        <androidx.recyclerview.widget.RecyclerView
                            android:id="@+id/rv"
                            android:layout_below="@+id/tv2"
                            android:layout_width="match_parent"
                            android:focusable="false"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="24dp"
                            android:layout_above="@+id/pb_pagination"/>
    
                         <ProgressBar
                            android:id="@+id/pb_pagination"
                            style="@style/Widget.AppCompat.ProgressBar"
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:indeterminate="true"
                             android:visibility="gone"
                            android:layout_alignParentBottom="true"
                            android:layout_centerHorizontal="true" />
        </RelativeLayout>
  8. -2

    Enfoque diferente sería el inicio de la llamada a la API dentro de onBindViewHolder y initialy lugar en los elementos de la vista de algún indicador de progreso. Después de que la llamada haya terminado, la actualización de la vista (ocultar el progreso y mostrando los datos recibidos). Por ejemplo, con Picasso para la carga de imágenes, onBindViewHolder método tendría este aspecto

    @Override
    public void onBindViewHolder(final MovieViewHolder holder, final int position) {
        final Movie movie = items.get(position);
        holder.imageProgress.setVisibility(View.VISIBLE);
        Picasso.with(context)
                .load(NetworkingUtils.getMovieImageUrl(movie.getPosterPath()))
                .into(holder.movieThumbImage, new Callback() {
                    @Override
                    public void onSuccess() {
                        holder.imageProgress.setVisibility(View.GONE);
                    }
                    @Override
                    public void onError() {
    
                    }
                });
    }

    Como yo lo veo, hay dos casos que pueden aparecer:

    1. donde descargar todos los artículos en versión light con una llamada (por ejemplo, el adaptador sabe de inmediato que él va a tener que lidiar con 40 fotos, pero las descargas en la demanda —> caso que mostré anteriormente con Picasso)
    2. en la que están trabajando con el real de la carga diferida y usted está pidiendo un servidor para dar más cantidad de datos. En este caso, el primer requisito es tener una adecuada respuesta desde el servidor con la información necesaria. Antes de ejemplo
      {
      «offset»: 0,
      «total»: 100,
      «items»: [{elementos}]
      }

    Hay respuesta significa que usted recibió el primer fragmento de un total de 100 datos. Mi enfoque sería algo como esto:

    Ver
    Después de conseguir el primer fragmento de datos (por ejemplo, 10) agregar en el adaptador.

    RecyclerView.El adaptador.getItemCount
    Mientras la actual cantidad de artículos disponibles es menor que el total de la cantidad (por ejemplo, 10, un total de 100), en getItemCount método que va a devolver los artículos.size() + 1

    RecyclerView.El adaptador.getItemViewType
    si la cantidad total de datos es mayor que la cantidad de elementos disponibles en el adaptador y la posición = elementos.size() (es decir, has fictively se ha agregado un elemento en getItemCount método), como el tipo de vista que la devolución de algún progreso-indicador. De lo contrario, vas a volver normal tipo de diseño

    RecyclerView.El adaptador.onCreateViewHolder
    Cuando se le pide que utilice el progreso-indicador de tipo de vista, todo lo que necesita hacer es pedir a su presentador para obtener un pedazo de los elementos y actualizar el adaptador

    Así que, básicamente, este es el enfoque en el que no tiene para agregar o quitar elementos de la lista y donde usted tiene control sobre la situación, cuando la carga diferida será activada.

    Aquí está el código de ejemplo:

    public class ForecastListAdapter extends RecyclerView.Adapter<ForecastListAdapter.ForecastVH> {
    private final Context context;
    private List<Forecast> items;
    private ILazyLoading lazyLoadingListener;
    public static final int VIEW_TYPE_FIRST         = 0;
    public static final int VIEW_TYPE_REST          = 1;
    public static final int VIEW_TYPE_PROGRESS      = 2;
    public static final int totalItemsCount = 14;
    public ForecastListAdapter(List<Forecast> items, Context context, ILazyLoading lazyLoadingListener) {
    this.items = items;
    this.context = context;
    this.lazyLoadingListener = lazyLoadingListener;
    }
    public void addItems(List<Forecast> additionalItems){
    this.items.addAll(additionalItems);
    notifyDataSetChanged();
    }
    @Override
    public int getItemViewType(int position) {
    if(totalItemsCount > items.size() && position == items.size()){
    return VIEW_TYPE_PROGRESS;
    }
    switch (position){
    case VIEW_TYPE_FIRST:
    return VIEW_TYPE_FIRST;
    default:
    return VIEW_TYPE_REST;
    }
    }
    @Override
    public ForecastVH onCreateViewHolder(ViewGroup parent, int viewType) {
    View v;
    switch (viewType){
    case VIEW_TYPE_PROGRESS:
    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.forecast_list_item_progress, parent, false);
    if (lazyLoadingListener != null) {
    lazyLoadingListener.getAdditionalItems();
    }
    break;
    case VIEW_TYPE_FIRST:
    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.forecast_list_item_first, parent, false);
    break;
    default:
    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.forecast_list_item_rest, parent, false);
    break;
    }
    return new ForecastVH(v);
    }
    @Override
    public void onBindViewHolder(ForecastVH holder, int position) {
    if(position < items.size()){
    Forecast item = items.get(position);
    holder.date.setText(FormattingUtils.formatTimeStamp(item.getDt()));
    holder.minTemperature.setText(FormattingUtils.getRoundedTemperature(item.getTemp().getMin()));
    holder.maxTemperature.setText(FormattingUtils.getRoundedTemperature(item.getTemp().getMax()));
    }
    }
    @Override
    public long getItemId(int position) {
    long i = super.getItemId(position);
    return i;
    }
    @Override
    public int getItemCount() {
    if (items == null) {
    return 0;
    }
    if(items.size() < totalItemsCount){
    return items.size() + 1;
    }else{
    return items.size();
    }
    }
    public class ForecastVH extends RecyclerView.ViewHolder{
    @BindView(R.id.forecast_date)TextView date;
    @BindView(R.id.min_temperature)TextView minTemperature;
    @BindView(R.id.max_temperature) TextView maxTemperature;
    public ForecastVH(View itemView) {
    super(itemView);
    ButterKnife.bind(this, itemView);
    }
    }
    public interface ILazyLoading{
    public void getAdditionalItems();
    }}

    Tal vez esto te inspiran para hacer algo que se adapte a sus necesidades

    • Haciendo un servicio web / llamada a la API dentro de cada elemento de la colección? ¿de verdad? Suena tedioso y altamente ineficiente / caro. Gracias por tu respuesta, aunque … 🙂
    • ¿necesita también ver la parte?
    • sólo por curiosidad – ¿vas a dar un rodaje? Yo estaría encantado de recibir comentarios positivos si ayuda
    • Picasso es bastante bueno en la caché de imágenes, por lo que la imagen se carga desde la red una vez y reutilizados en posteriores onBindViewHolder llamadas para esa imagen.

Dejar respuesta

Please enter your comment!
Please enter your name here