如果都是文本或者有一些靜态圖檔等高度确定的item,RecyclerView的scrollToPosition或者smoothScrollToPosition
滾動肯定是精準的。
但是,當我們的item中有一些網絡圖檔需要加載時,這個時候RecyclerView的xxx方法就無法精确滾動了,
因為圖檔是異步加載的,滾動的時候圖檔可能還沒加載完成,會影響RecyclerView的高度計算(圖檔高度确定的除外)。
這個時候就得這麼處理了:
private void scrollToBottom(final RecyclerView recyclerView) {
// scroll to last item to get the view of last item
final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
final RecyclerView.Adapter adapter = recyclerView.getAdapter();
final int lastItemPosition = adapter.getItemCount() - 1;
layoutManager.scrollToPositionWithOffset(lastItemPosition, 0);
recyclerView.post(new Runnable() {
@Override
public void run() {
// then scroll to specific offset
View target = layoutManager.findViewByPosition(lastItemPosition);
if (target != null) {
int offset = recyclerView.getMeasuredHeight() - target.getMeasuredHeight();
layoutManager.scrollToPositionWithOffset(lastItemPosition, offset);
}
}
});
}
也就是我們需要先粗略滾動一次,再精确滾動一次就能過精确滾動到指定的item位置了。
參考自:https://li2.gitbooks.io/android-programming-journey/content/UI_and_Navigation/scroll-to-bottom-of-recyclerview-programmatically.html 感謝部落客大大