How to implement load more recyclerview in android

前端 未结 8 1861
盖世英雄少女心
盖世英雄少女心 2020-12-30 06:23

I want to implement load more in Recyclerview. Here is the code. The code is from github. https://gist.github.com/ssinss/e06f12ef66c51252563e

MainActivity code:

8条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-30 06:43

    public abstract class LoadMoreAdapter extends RecyclerView.Adapter{
    private LoadMoreListner loadMoreListner;
    private boolean isLoading;
    int vissibleThreshold = 5;
    
    public LoadMoreAdapter(final LoadMoreListner loadMoreListner, RecyclerView recyclerView) {
        this.loadMoreListner = loadMoreListner;
        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }
    
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                int totalItemCOunt = linearLayoutManager.getItemCount();
                int lastVissibleItemPOs = linearLayoutManager.findLastVisibleItemPosition();
                if (!isLoading && totalItemCOunt<= lastVissibleItemPOs+vissibleThreshold){
                    if (loadMoreListner!=null){
                        isLoading = true;
                        loadMoreListner.onLoadMore();
                    }
                }
            }
        });
    }
    public void setLoaded(){
        isLoading =false;
    }
    

    }

    Your adapter will extends to this LoadmoreAdapter

    public interface LoadMoreListner {
    void onLoadMore();
    

    }

    And in your activity

    @Override
    public void onLoadMore() {
        items.add(null);
        nameLoadMoreAdapter.notifyItemInserted(items.size()-1);
        loadNewData();
    }
    

    After populating list and here your loadnewData() will have this

    items.remove(items.size()-1);
                nameLoadMoreAdapter.notifyItemRemoved(items.size());
                items.addAll(itemsArrayList);
                nameLoadMoreAdapter.notifyItemInserted(items.size());
                nameLoadMoreAdapter.setLoaded();
    

    where itemsArrayList are of newdata

提交回复
热议问题