Los divisores no se mostraron en RecyclerView después de addItemDecoration () llamado
Un RecyclerView
está anidado en un CardView
. Intenté llamar addItemDecoration()
para agregar divisores en RecycylerView
, pero no funcionó.
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" card_view:cardBackgroundColor="@color/white_color" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" card_view:cardElevation="3dp"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_saleproduct_list" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_saleproduct_list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:visibility="visible" /> </android.support.v4.widget.SwipeRefreshLayout> </android.support.v7.widget.CardView>
El código java:
- Conjunto de datos de cambio RecyclerView
- Anular la animación para notifyItemChanged en RecyclerView.Adapter
- TableLayout con RecyclerView
- Compruebe si RecyclerView es desplazable
- Twowayview agrega automáticamente relleno al desplazarse
mSwipe = (SwipeRefreshLayout)view.findViewById(R.id.swipe_saleproduct_list); mRecyclerView= (RecyclerView) view.findViewById(R.id.recycler_saleproduct_list); mRecyclerView.setLayoutManager(new LinearLayoutManager(UIUtils.getContext())); mRecyclerView.addItemDecoration(new DividerItemDecoration(UIUtils.getContext(), DividerItemDecoration.VERTICAL_LIST)); SaleProductListAdapter saleProductListAdapter = new SaleProductListAdapter(UIUtils.getContext(), mRecyclerView, list, mSwipe); mRecyclerView.setAdapter(saleProductListAdapter);
- Hacer que ItemDecoration se mueva con Animation
- ListSelector para RecyclerView en el dispositivo táctil libre (usando onKey Listener)
- Android reciclerview no muestra elementos
- Error al inflar la clase android.support.v7.widget.RecyclerView
- ¿Cuál es el punto de usar decoraciones de artículos en RecyclerView VS edición de los diseños inflados individuales?
- ¿Cómo agregar un botón al final de RecyclerView?
- Recyclerview Sin adaptador conectado; Saltar el diseño
- Android RecyclerView: notifyDataSetChanged () IllegalStateException
Esto a continuación es un buen ejemplo, eche un vistazo a él:
public class DividerItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } public void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } @Override public void onDraw(Canvas c, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } 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); 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); 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); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } }
Y aquí está mi Fragment
, funciona bien, qué divider
es claro y delgado:
public static class RecyclerViewFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_recyclerview, container, false); RecyclerView recyclerView = (RecyclerView) root.findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); RecyclerViewAdapter adapter = new RecyclerViewAdapter(getActivity(), getResources() .getStringArray(R.array.countries)); recyclerView.setAdapter(adapter); return root; } }
Espero que se sienta inspirado.
El mDivider
con el sistema quizás NullPointerException
en la plataforma KitKat y abajo, por lo que sugiero utilizar mDivider
con uno mismo como:
public MyDecoration(Context context, int orientation) { mDivider = context.getResources().getDrawable(R.drawable.line_divider); setOrientation(orientation); }
Y aquí está el line_divider:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="1dp" android:height="1dp" /> <solid android:color="@color/color_in_common_green" /> </shape>
Quizás funcione bien
- ¿Cuál es la manera más apropiada de leer todos los datos de un archivo de texto de una sola vez?
- Archivo de datos de Jacoco no legible para Android en TeamCity