天天看點

RecylcerView精确滾動到底部

如果都是文本或者有一些靜态圖檔等高度确定的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  感謝部落客大大