Cómo decorar selectivamente los elementos de RecyclerView
Estoy creando una subclase de ItemDecoration
de esta esencia: https://gist.github.com/alexfu/0f464fc3742f134ccd1e
¿Cómo hacer que sólo decorar los artículos con ciertas condiciones? Por ejemplo, sólo decorar elementos con ciertas posiciones, tipo de ViewHolder, etc.
- ¿Qué es alertcontroller.recyclelistview
- Importación de CardView y RecyclerView (Android 5.0) en mi proyecto existente (eclipse)
- ¿Hay observadores escritos en RecyclerView.Adapter para saber si el conjunto de datos ha sido cambiado?
- Cómo configurar un observador para actualizar el cajón de navegación después de que el método onActivityResult recibió un resultado de intención
- La barra de herramientas no se contrae con RecyclerView anidado
He modificado el gist mencionado arriba (más algunos cambios en la API de Android obsoleta) con este código, pero todos los artículos se decoran de todos modos:
public boolean isDecorated(View view, RecyclerView parent) { RecyclerView.ViewHolder holder = parent.getChildViewHolder(view); return holder instanceof MenuIconViewHolder || holder instanceof MenuDetailViewHolder; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if (isDecorated(view, parent)) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } else { super.getItemOffsets(outRect, view, parent, state); } }
¿Qué pasa con el código anterior? Por cierto, ¿puede considerarse la mejor práctica (en cuanto a la separación de las preocupaciones) para colocar ese tipo de código en la clase ItemDecoration?
- ¿Recyclerview hace que el último elemento agregado sea el elemento seleccionado?
- Visualización de imágenes de almacenamiento en base a firebase en un RecyclerView
- Lista de vídeos de Android ListView
- Problema de desplazamiento Infinito Infinito de RecyclerView
- RecyclerView notifyItemInserted IllegalStateException
- Cómo implementar gridlayoutmanager horizontal
- Cómo importar RecyclerView para Android L-preview
- RecyclerView con el índice del alfabeto
Tienes que llamar a isDecorated en el método de dibujo, así, porque en el momento en que no se pone la compensación en esos elementos, pero todavía dibujar sobre ella.
El método loops sobre todas las vistas secundarias actualmente en el RecyclerView visibles en la pantalla.
public void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); if(isDecorated(child, parent)) { final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } } public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); if(isDecorated(child, parent)) { final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } }
- Añadir biblioteca java al proyecto Android Studio con el repositorio maven
- Problemas de asignación de memoria con la aplicación Android