2015-05-15 7 views
6

RecyclerViewCardView में घोंसला दिया गया है। RecycylerView में डिवाइडर जोड़ने के लिए मैंने addItemDecoration() पर कॉल करने का प्रयास किया, लेकिन यह काम नहीं किया।डिवाइडर रीसाइक्लर व्यू में प्रदर्शित नहीं किए गए हैं, इसके बाद addItemDecoration() को

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

जावा कोड:

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

अधिक कोड पोस्ट करें, कृपया। फिर हम आपकी मदद कर सकते हैं। – SilentKnight

+2

एक कार्डव्यू के अंदर एक रीसाइक्लर व्यू के साथ एक स्वाइप रिफ्रेश लयआउट डालना बिल्कुल अच्छा विचार नहीं लगता है। – Egor

+1

क्यों? कुछ गलत? –

उत्तर

6

यह नीचे एक अच्छा उदाहरण है, यह पर एक नज़र डालें:

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

और यहाँ है मेरी Fragment, यह अच्छी तरह से काम करता है, जो divider स्पष्ट और पतला है:

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

मुझे उम्मीद है कि आप प्रेरित होंगे।

+2

धन्यवाद, लेकिन यह काम नहीं किया है। –

+0

@ 梁航斌 यह काम किया! – SilentKnight

1

शायद NullPointerException मंच किटकैट और नीचे पर mDivider सिस्टम के साथ है, इसलिए मैं अपने आप को साथ mDivider का उपयोग पसंद का सुझाव:

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

यह शायद काम:

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

और यहाँ line_divider है अच्छी तरह से

संबंधित मुद्दे