Closed wyh497823256 closed 7 years ago
我猜想,你可能每次执行刷新方法的时候,都执行了addItemDecoration。查看源码可以发现RecyclerView是用一个List来储存ItemDecoration的,所以才有了addItemDecoration方法,而不是set...,ItemDecoration是累加的。在RecyclerView的draw方法中可以很清楚的看到,
@Override public void draw(Canvas c) { super.draw(c); final int count = mItemDecorations.size(); for (int i = 0; i < count; i++) { mItemDecorations.get(i).onDrawOver(c, this, mState); } ...... }
所以,你的问题可能就是重复addItemDecoration了,解决办法有两个,着重推荐第一种: 第一种:在recyclerView初始化的时候调用一次addItemDecoration,其他地方就不要写了 第二种:每次addItemDecoration的时候,把以前add的给清除掉,可惜RecyclerView有关ItemDecoration操作的方法只有两个,一个addItemDecoration和一个removeItemDecoration,没有把储存ItemDecoration的集合给清空的方法,在这里一个不太严谨的解决办法就是,在你每次add之前调用remove方法,确保集合是空的。
最主要是第一种方法,如果还是不能解决你的问题,请加我qq:1924355291
@yanyusong 非常感谢你的回答,你说的没错,就是因为重复add 导致的问题,我已经解决了这个问题。谢谢
我猜想,你可能每次执行刷新方法的时候,都执行了addItemDecoration。查看源码可以发现RecyclerView是用一个List来储存ItemDecoration的,所以才有了addItemDecoration方法,而不是set...,ItemDecoration是累加的。在RecyclerView的draw方法中可以很清楚的看到,
所以,你的问题可能就是重复addItemDecoration了,解决办法有两个,着重推荐第一种: 第一种:在recyclerView初始化的时候调用一次addItemDecoration,其他地方就不要写了 第二种:每次addItemDecoration的时候,把以前add的给清除掉,可惜RecyclerView有关ItemDecoration操作的方法只有两个,一个addItemDecoration和一个removeItemDecoration,没有把储存ItemDecoration的集合给清空的方法,在这里一个不太严谨的解决办法就是,在你每次add之前调用remove方法,确保集合是空的。
最主要是第一种方法,如果还是不能解决你的问题,请加我qq:1924355291