RecyclerView内置Bug

来源:互联网 发布:奥比岛刷奥币软件 编辑:程序博客网 时间:2024/06/03 04:31


今天在测试自己写的App时突然崩溃,查了下问题,原来是RecyclerView的一个内在Bug导致的。
问题出现在用SwipeRefreshLayout进行刷新时把数据clear,再立刻不断往下拉RecyclerView,于是就出现了Crash。找了很久解决方法,很多人说做个判断,在clear的时候禁止下拉,但是这样会导致用户体验很差,解决方案:
在SwipeRefreshLayout中:
 if (recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE ||
        !recyclerView.isComputingLayout()) {
    activityAdapter.notifyDataSetChanged();
}

在执行notifyDataSetChanged之前,现判断当前时候还在滑动,如果没有滑动,执行notifyDataSetChanged方法。
解释下上面代码:getScrollState()方法获取到scrollState,scrollState有三种状态,分别是开始滚动(SCROLL_STATE_FLING),正在滚动(SCROLL_STATE_TOUCH_SCROLL), 已经停止(SCROLL_STATE_IDLE),也就是说当recyclerview已经停止滚动或者recyclerview还未布局完成,就调用其适配器的notifyDataSetChanged()方法,
notifyDataSetChanged()方法是data数据发生变化时,要及时用来通知主线程刷新UI,但不是每次改变都刷新。