How to implement endless list with RecyclerView?

前端 未结 30 3063
无人及你
无人及你 2020-11-22 02:22

I would like to change ListView to RecyclerView. I want to use the onScroll of the OnScrollListener in RecyclerView to determine if a

30条回答
  •  轮回少年
    2020-11-22 03:07

    I let you my aproximation. Works fine for me.

    I hope it helps you.

    /**
     * Created by Daniel Pardo Ligorred on 03/03/2016.
     */
    public abstract class BaseScrollListener extends RecyclerView.OnScrollListener {
    
        protected RecyclerView.LayoutManager layoutManager;
    
        public BaseScrollListener(RecyclerView.LayoutManager layoutManager) {
    
            this.layoutManager = layoutManager;
    
            this.init();
        }
    
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    
            super.onScrolled(recyclerView, dx, dy);
    
            this.onScroll(recyclerView, this.getFirstVisibleItem(), this.layoutManager.getChildCount(), this.layoutManager.getItemCount(), dx, dy);
        }
    
        private int getFirstVisibleItem(){
    
            if(this.layoutManager instanceof LinearLayoutManager){
    
                return ((LinearLayoutManager) this.layoutManager).findFirstVisibleItemPosition();
            } else if (this.layoutManager instanceof StaggeredGridLayoutManager){
    
                int[] spanPositions = null; //Should be null -> StaggeredGridLayoutManager.findFirstVisibleItemPositions makes the work.
    
                try{
    
                    return ((StaggeredGridLayoutManager) this.layoutManager).findFirstVisibleItemPositions(spanPositions)[0];
                }catch (Exception ex){
    
                    // Do stuff...
                }
            }
    
            return 0;
        }
    
        public abstract void init();
    
        protected abstract void onScroll(RecyclerView recyclerView, int firstVisibleItem, int visibleItemCount, int totalItemCount, int dx, int dy);
    
    }
    

提交回复
热议问题