2017-06-22 102 views

回答

3

你可以试试这个,

public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration { 
    private Drawable mDivider; 

    public SimpleDividerItemDecoration(Context context) { 
     mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider); 
    } 

    @Override 
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { 
     int left = parent.getPaddingLeft(); 
     int right = parent.getWidth() - parent.getPaddingRight(); 

     int childCount = parent.getChildCount(); 
     for (int i = 0; i < childCount; i++) { 

      if (i == (childCount - 1)) { 
       continue; 
      } 

      View child = parent.getChildAt(i); 

      RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); 

      int top = child.getBottom() + params.bottomMargin; 
      int bottom = top + mDivider.getIntrinsicHeight(); 

      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
     } 
    } 
} 
+0

不幸的是,这没有奏效。实际上,我遇到了一个怪异的问题。这似乎是正确的方式,但我需要弄清楚我的代码中的其他错误。谢谢 – fobbymaster

+0

这是不正确的答案。 'childCount - 1'会给你最后一个**可见**孩子的索引。正确的比较是:@Maxim Turaev的答案是'parent.getChildAdapterPosition(child)== parent.getAdapter()。getItemCount() - 1' – Stanislav

-1

[更新]

看起来像支持库的新版本不起作用了:(

你可以也可以这样做,(表格here):

recyclerView.addItemDecoration(
    new DividerItemDecoration(context, layoutManager.getOrientation())) { 
    @Override 
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
     int position = parent.getChildAdapterPosition(view); 
     // hide the divider for the last child 
     if (position == parent.getAdapter().getItemCount() - 1) { 
      outRect.setEmpty(); 
     } else { 
      super.getItemOffsets(outRect, view, parent, state); 
     } 
    } 
}); 
+0

不适用于我。 – lostintranslation

+0

是的,也不适合我。 – Sotti

相关问题