3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
該錯(cuò)誤是由于負(fù)索引 (-1) 造成的。
看這段代碼:
if (count == headerSliderAdapter.getItemCount() - 1) {
flag = false;
} else if (count == 0) {
flag = true;
}
如果您的項(xiàng)目數(shù)為 1,那么第一個(gè)項(xiàng)目if將true在 時(shí)出現(xiàn)count == 0。1 - 1 = 0 所以flag = false。
然后,當(dāng)你到達(dá)第二個(gè)時(shí)if:
if (flag) count++;
else count--;
flag是false這樣你的代碼將執(zhí)行count--但count已經(jīng)是 0,因此你得到count == -1.
然后你嘗試滾動(dòng)到負(fù)位置,這是不允許的。

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
不要使用非線程安全的延遲后方法。
private fun scrollToLastItem(view: View) {
//pos.coerceAtLeast(0) // Use this
view.recycler_view.smoothScrollToPosition(pos.coerceAtLeast(0))
}
RCA:在 ScrollLayoutManager startSmoothPendingScroll 方法崩潰之前,當(dāng)前位置為 -1。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
它也可以(在最后一個(gè)位置的情況下):
private fun scrollToLastItem(view: View) {
adapter.itemCount.takeIf { it > 0 }?.let {
view.recycler_view.smoothScrollToPosition(it - 1)
}
}
添加回答
舉報(bào)