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.
- Recyclerview de Android vs ListView con el usuario
- No funciona Notifydatasetchange en RecyclerView con selección de centro Horizontal Scrollview?
- RecyclerView almacena / restaura el estado entre las actividades
- ¿La transición reversa reversa del elemento del androide sobre detrás después de cambio de la orientación?
- Establecer el intervalo de elementos en GridLayoutManager mediante SpanSizeLookup
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 no llama aCreateViewHolder o onBindView
- Cómo rellenar la imagen dentro de ImageView por la costumbre de la izquierda y la coordenada superior | Androide
- Guardar contenido de EditText en RecyclerView
- Cómo resaltar el elemento seleccionado de Recycler View?
- Cómo abrir fragmento de RecyclerView.Adapter <CardAdapter.ViewHolder>
- ¿Cómo agregar la transparencia del artículo dentro de RecyclerView cuando está fuera del límite de la lista?
- Aplicación android de Gmail como vista de lista con una letra en el icono
- Cómo refundir elementos en un RecyclerView con el StaggeredGridLayoutManager
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