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.

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?

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); } } } 
  • La forma más sencilla de mostrar Cuerdas con iconos en un RecyclerView
  • RecyclerView onItemClick Listener
  • Android: la adición de vistas a las imágenes no se actualiza - onClick
  • Cuando getItemCount y método getItemViewType se llaman en Recycler Adapter
  • Cómo abrir un fragmento diferente en recyclerview OnClick
  • RecyclerView Adapter da error "La jerarquía del tipo RecycleAdapter es inconsistente"
  • Android RecyclerView desplazamiento suave para ver que está animando su altura
  • El uso del ejemplo de RecyclerView no compila
  • Getter no está asociado a ningún campo - Realm
  • RecyclerView con el índice del alfabeto
  • Eliminar fila de RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.