2015-05-15 11 views
6

A RecyclerView è nidificato in un CardView. Ho provato a chiamare addItemDecoration() per aggiungere divisori in RecycylerView, ma non ha funzionato.I divisori non sono stati visualizzati in RecyclerView dopo addItemDecoration() chiamato

<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> 

il codice Java:

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); 
+1

inserisci più codici, plz. Allora potremmo aiutarti. – SilentKnight

+2

Mettere un SwipeRefreshLayout con un RecyclerView all'interno di CardView non sembra affatto una buona idea. – Egor

+1

perché? Qualcosa di sbagliato? –

risposta

6

Questa qui sotto è un buon esempio, dare un'occhiata a questo:

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); 
     } 
    } 
} 

Ed ecco la mia Fragment, funziona bene, che divider è chiaro e sottile:

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; 
    } 
} 

Spero che tu sia ispirato.

+2

grazie, ma non ha funzionato. –

+0

@ 梁航斌 Ha funzionato! – SilentKnight

1

Il mDivider con System forse NullPointerException su piattaforma KitKat e al di sotto, quindi suggerisco usare mDivider con se stessi come:

public MyDecoration(Context context, int orientation) { 
    mDivider = context.getResources().getDrawable(R.drawable.line_divider); 
    setOrientation(orientation); 
} 

e qui è il 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> 

E 'forse funziona bene

Problemi correlati