Android小记:自定义Button导致RecyclerView列表监听onScroll回调异常

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xiong_IT/article/details/83023769

背景

一天,搭档告知笔者,在使用了自定义Button后,RecyclerView的onScroll回调一直被重复回调,导致程序运行异常。

本文地址:https://blog.csdn.net/Xiong_IT
作者:MichaelX

排查

查看该自定义控件,主要重写了onDraw方法,发现引发异常的代码在于循环调用了setCompoundDrawables去更新按钮。

原因

public void setCompoundDrawables(@Nullable Drawable left, @Nullable Drawable top,
            @Nullable Drawable right, @Nullable Drawable bottom) {
        Drawables dr = mDrawables;

        // 忽略代码

        resetResolvedDrawables();
        resolveDrawables();
        applyCompoundDrawableTint();
        invalidate();
        requestLayout();
    }

setCompoundDrawables会调用requesLayout()导致父控件不停重新排版,导致onScroll不停回调,异常原因找到。

猜你喜欢

转载自blog.csdn.net/Xiong_IT/article/details/83023769