yanyusong / Y_DividerItemDecoration

A common RecyclerView divider , supports the LinearLayoutManager and the GridLayoutManager.
https://juejin.im/post/5940a020a0bb9f006b734228
Apache License 2.0
378 stars 56 forks source link

RecyclerView 嵌套 RecyclerView 并且带有下拉刷新的情况下,刷新一次间距增大一次 #1

Closed wyh497823256 closed 7 years ago

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

wyh497823256 commented 7 years ago

@yanyusong 非常感谢你的回答,你说的没错,就是因为重复add 导致的问题,我已经解决了这个问题。谢谢