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?
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.
si está utilizando dos o más vistas de reciclado como (RecyclerView y NestedView) intente esto
recyclerView.setNestedScrollingEnabled(false);
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.