studio recyclerview recycler android android-recyclerview picasso

recyclerview - pagination in android



RecyclerView laggy scrolling (6)

¿RecyclerView.setHasFixedSize () está establecido en verdadero? No puedo reproducir este retraso ... ¿pueden publicar todo el proyecto en git? Mira esto, tal vez te pueda ayudar: http://antonioleiva.com/recyclerview/

Estoy cargando 400x200 imágenes en RecyclerView, pero el desplazamiento es lento en dispositivos 2k. Estoy usando Picasso para cargar imágenes desde el recurso.

Como puede ver en la demostración, las imágenes son borrosas en la pantalla de 2k, pero si cargo imágenes de mayor resolución, la situación empeora. ¿Cómo solucionar esto, ni siquiera estoy cargando una imagen grande, es 400x200?

Manifestación

Aquí está mi código Card_view.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" card_view:cardPreventCornerOverlap="false" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="8dp" card_view:cardCornerRadius="2dp" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/rel" > <ImageView android:id="@+id/cardimage" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/p7" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="title" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp" android:paddingBottom="24dp" android:textStyle="bold" android:textSize="24sp" android:id="@+id/cardtitle" android:layout_gravity="center_vertical" /> </LinearLayout> </android.support.v7.widget.CardView>

Código Myadapter

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { private Context mContext; List<Flower> list = new ArrayList<>(); public CardAdapter(Context mContext, List<Flower> list) { this.mContext = mContext; this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.card_view, parent, false); return new ViewHolder(itemView); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.Flower=getItem(position); holder.cardtitle.setText(list.get(position).name); Picasso.with(mContext) .load(list.get(position).id) .placeholder(R.drawable.ic_launcher) .into(holder.cardimage); } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } @Override public int getItemCount() { return list.size(); } public Flower getItem(int i) { return list.get(i); } public class ViewHolder extends RecyclerView.ViewHolder { ImageView cardimage; TextView cardtitle; Flower Flower; public ViewHolder(View itemView) { super(itemView); cardimage = (ImageView) itemView.findViewById(R.id.cardimage); cardtitle = (TextView) itemView.findViewById(R.id.cardtitle); } } }

ACTUALIZACIÓN: estoy cargando imágenes desde el recurso, no estoy descargando nada

Aquí está mi matriz

private void initializeData() { flowers = new ArrayList<>(); flowers.add(new Flower("Flower 1", R.drawable.p8)); flowers.add(new Flower("Flower 2", R.drawable.p10)); flowers.add(new Flower("Flower 3", R.drawable.p11)); flowers.add(new Flower("Flower 4", R.drawable.p8)); flowers.add(new Flower("Flower 5", R.drawable.photo2)); flowers.add(new Flower("Flower 6", R.drawable.photo6)); flowers.add(new Flower("Flower 7", R.drawable.p12)); flowers.add(new Flower("Flower 8", R.drawable.p9)); flowers.add(new Flower("Flower 9", R.drawable.p8)); flowers.add(new Flower("Flower 10", R.drawable.p8)); flowers.add(new Flower("Flower 11", R.drawable.p8)); flowers.add(new Flower("Flower 12", R.drawable.p10)); }

ACTUALIZACIÓN 2: Chicos fijé la mayor parte del retraso configurando adapter.setHasStableIds (true), pero la aplicación todavía está lenta en el primer desplazamiento mientras las imágenes no se cargan aún, ¿cómo solucionarlo?

ACTUALIZACIÓN 3: Acabo de intentar cargar imágenes desde la web y todo parece sin problemas, probablemente haya algún problema con la carga de imágenes desde el recurso.

Ok, gracias chicos, voy a cargar mis imágenes desde la web.


Creo que la razón es que Picasso almacena tus imágenes en la memoria caché, pero como tienes una lista de herramientas que puedes combinar con tu aplicación, en teoría no necesitas almacenarlas en la memoria caché. El almacenamiento en caché solo es útil cuando está descargando la imagen de Internet y no desea que la aplicación vuelva a descargar las imágenes cada vez que desliza hacia arriba o hacia abajo la vista del reciclador.

Me gustaría ajustar la forma en que funciona Picasso cambiando la política de memoria, así que prueba esto:

Picasso.with(getContext()).load(data.get(pos).getFeed_thumb_image()).memoryPolicy(MemoryPolicy.NO_CACHE).into(image);


Necesita obtener las imágenes de forma asíncrona. Como es ahora, se detiene para realmente descargar la imagen.

Deje la vista de la imagen en blanco cuando se crea, pero tenga algún tipo de oyente para configurar la imagen cuando se haya descargado.


si usa Recyclerview en modo vertical y su actividad contiene otro elemento que tiene ScrollView entonces debe usar NestedScrollView lugar de ScrollView .

como se describe en la documentación de google, NestedScrollView es como ScrollView, pero admite actuar tanto como un elemento principal desplazable anidado como secundario en versiones nuevas y antiguas de Android. El desplazamiento anidado está habilitado por defecto.



Tenía un problema de lacry recyclerView cuando una de las textView dentro de recyclerView recibía valores nulos. Arreglo esto y mi recyclerView se detuvo.