3 回答
TA贡献1851条经验 获得超3个赞
该错误是由于负索引 (-1) 造成的。
看这段代码:
if (count == headerSliderAdapter.getItemCount() - 1) {
flag = false;
} else if (count == 0) {
flag = true;
}
如果您的项目数为 1,那么第一个项目if将true在 时出现count == 0。1 - 1 = 0 所以flag = false。
然后,当你到达第二个时if:
if (flag) count++;
else count--;
flag是false这样你的代码将执行count--但count已经是 0,因此你得到count == -1.
然后你尝试滚动到负位置,这是不允许的。
TA贡献1883条经验 获得超3个赞
不要使用非线程安全的延迟后方法。
private fun scrollToLastItem(view: View) {
//pos.coerceAtLeast(0) // Use this
view.recycler_view.smoothScrollToPosition(pos.coerceAtLeast(0))
}
RCA:在 ScrollLayoutManager startSmoothPendingScroll 方法崩溃之前,当前位置为 -1。
TA贡献1865条经验 获得超7个赞
它也可以(在最后一个位置的情况下):
private fun scrollToLastItem(view: View) {
adapter.itemCount.takeIf { it > 0 }?.let {
view.recycler_view.smoothScrollToPosition(it - 1)
}
}
添加回答
举报