RecyclerView设置addItemDecoration在Fragment中不显示
来源:互联网 发布:苹果 联通4g劫持网络 编辑:程序博客网 时间:2024/04/30 19:40
今天发现在activity中RecyclerView设置AddItemDecoration能正常显示,但在Fragment中不能正常显示了,有人说是setLayoutManager和DividerItemDecoration中传的contetxt原因,测了下不管用。后来发现是RecyclerView.ItemDecoration中drawHorizontalLine和drawVerticalLine的问题,改了下后发现可以正常显示了。
代码如下:
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中这样设置
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));
阅读全文
0 0
- RecyclerView设置addItemDecoration在Fragment中不显示
- Android Fragment中嵌套Fragment不显示
- 设置高德地图在Fragment中显示
- 设置高德地图在Fragment中显示
- 关于在Fragment中使用多组ViewPager+TabLayout出现的部分Fragment不显示问题
- RecyclerView 中嵌套ViewPager不显示
- RecyclerView中item嵌套RecyclerView不显示问题
- RecyclerView调用addItemDecoration添加自定义分割线
- RecyclerView调用addItemDecoration添加自定义分割线
- 在Activity中显示Fragment
- 关于在TextView中设置DrawableLeft不显示的问题
- 如何在清单文件中设置actionbar不显示
- ViewPager中嵌套Fragment不显示问题
- Fragment中嵌套Fragment,多次显示隐藏父Fragment之后子Fragment不显示
- recyclerView不显示数据
- RecyclerView 不显示
- Recyclerview不显示内容
- fragment中嵌套viewpager,vierpager中用fragment不显示数据
- Hadoop实战一
- 一致性哈希算法与Java实现
- Linux中的PCB——tast_struct
- js验证失败后阻止提交
- 关于opencv在代码正确的情况下,无法显示图像的问题。
- RecyclerView设置addItemDecoration在Fragment中不显示
- JavaScript之闭包
- andriod——Retrofit+Fresco+MVP接口拼接传值
- android制定统一的ProgressBar以及统一的提示页面
- [Heoi2013]Segment
- 一些有用的链接地址_20171206
- 清澄A1023. 瓷砖铺放
- 25G Switch Vs. 40G Switch: How to Choose?
- 解决:perhaps the designated entry point is not set?