Cómo agregar una vista dinámica entre los elementos de RecyclerView en android?
Necesito agregar una tira pequeña entre los elementos de un RecyclerView. Esta tira puede venir después del número diferente de artículos en una lista. Esto debe hacerse dinámicamente. Necesito implementar algo como lo que FitBit ha hecho:
También necesito la primera fila es decir el que dice "esta semana" para pegarse en la tapa incluso si la página se desplaza abajo.
- Android: Desplazamiento de problemas con recyclerview dentro de un viewpager
- Añadir espacio al final del RecyclerView
- NativeAdsExpress obliga a RecyclerView a desplazarse para que el NativeAd se vea completamente cuando se carga por primera vez
- Actualizar ArrayList para mostrar nuevos datos en RecyclerView haciendo clic en Spinner Item
- Práctica recomendada para eliminar asincrónicamente un elemento ListView / RecyclerView
- Recyclerview, no puedo obtener la vista del elemento con getChildAt (posición). Referencia de objeto nulo
- La transición de elementos compartidos no tiene el comportamiento esperado
- Centro Horizontal última fila utilizando span Recycler GridLayoutManager
- cómo clasificar los datos en RecyclerView
- Quiero que mi RecyclerView no recicle algunos artículos
- ¿Cómo usar scrollVerticallyBy () con Android RecyclerView y LayoutManager?
- Selección de un valor RadioButton y desplazamiento hacia atrás eliminando el seleccionado en RecyclerView
- Transición de elementos compartidos de Android entre fragmentos con vista de reciclaje y detalles
Usar la biblioteca StickyHeaderRecyclerView
Es muy fácil de usar
Debe utilizar el concepto de diferentes tipos de vista utilizando getItemViewType (int) . A continuación, en onCreateViewHolder (ViewGroup, int) puede comprobar qué tipo debe inflar / crear.
Ejemplo:
@Override public int getItemViewType(int position) { // you should return the view type, based on your own dynamic logic } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { // handle each view type accordingly } }
Puede utilizar el concepto de varios tipos de vista en su RecyclerView
, simplemente utilizando getItemViewType()
y controlar el parámetro onCreateViewHolder()
en onCreateViewHolder()
.
Por ejemplo, puede utilizar el siguiente modelo:
public class Data{ int field1; float filed2; int rowType // 1,2,2,...N this will fill by you whenever you will //creating arraylist for your recyclerview } public class Custome Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { ArrayList<Data> mItems; class ViewHolderRowType1 extends RecyclerView.ViewHolder { ... } class ViewHolderRowType2 extends RecyclerView.ViewHolder { ... } .... class ViewHolderRowTypeN extends RecyclerView.ViewHolder { ... } @Override public int getItemViewType(int position) { return mItems.get(position).rowType; //or //return positon%2; // This will based on your condition } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case 0: return new ViewHolderRowType0(...); case 1: return new ViewHolderRowType1(...); ... case N: return new ViewHolderRowTypeN(...); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder vh, int position) { //Just check which view type is going to bind and then fill the data accordingly in your rows if(vh instanceof ViewHolderRowType1){ // Fill the data for first view type } else if (vh instanceof ViewHolderRowType2) { // Fill the data for second view type } else if (vh instanceof ViewHolderRowTypeN){ // Fill the data for Nth view type } }
Para su pegajosa "esta vista débil", puede agregarla en la parte superior de su RecyclerView
y luego manejarlo por desplazamiento Evento de RecyclerView
Hay dos maneras de implementar tal RecyclerView
- Agregue cabecera en cada diseño y ocultar / mostrar basado en su requisito (preferible).
- O utilizar dos diseños diferentes para el encabezado y el contenido (no es preferible porque puede causar problemas en la cuenta total de los elementos en el adaptador).
En su clase personalizada POJO / GetterSetter, agregue un campo para headerStatus
(ya sea booleano o int), para identificar si mostrar o no el encabezado.
Ahora en adaptador override public int getItemViewType(int position)
.
static final int TYPE_ITEM = 0; static final int TYPE_SEPARATOR = 1; @Override public int getItemViewType(int position) { if (mData.get(position).getHeaderStatus() == 0) return TYPE_ITEM; else return TYPE_SEPARATOR; }
Si quieres hacerlo de manera "correcta", sin hacks, debes escribir tu propio LayoutManager, y manejar esos casos a mano. No es tan difícil como suena, pero tomará algunos esfuerzos.
- Android – Administrador de etiquetas de Google con Google Analytics y Firebase Analytics
- Recuperar imagen de Picasa para subirla desde la galería