天天看點

RecyclerView加載更多(無Foot)

public  abstract class LoadMoreListener extends RecyclerView.OnScrollListener {

    //聲明一個LinearLayoutManager
    private LinearLayoutManager mLinearLayoutManager;

    //目前頁從0開始
    private int currentPage=0;
    //已經加載出來的Item的數量
    private int totalItemCount;

    //主要用來存儲上一個totalItemCount
    private int preivousTotal=0;

    //螢幕上可見的item數量
    private int visibleItemCount;

    //螢幕上可見的Item中的第一個
    private int fistVisibleItem;

    //是否正在上拉資料
    private boolean loading=true;

    public LoadMoreListener(LinearLayoutManager linearLayoutManager) {
        mLinearLayoutManager = linearLayoutManager;
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        //螢幕可見的條目數量
        visibleItemCount=recyclerView.getChildCount();
        //已經加載出來的條目數量
        totalItemCount=mLinearLayoutManager.getItemCount();
        //螢幕第一個條目可見對應的位置
        fistVisibleItem=mLinearLayoutManager.findFirstVisibleItemPosition();

        //如果是正在加載資料
        if (loading){
            if (totalItemCount>preivousTotal){
                //說明資料已經加載結束
                loading=false;
                preivousTotal=totalItemCount;
            }
        }
        if (!loading && totalItemCount-visibleItemCount <= fistVisibleItem){
            currentPage++;
            onLoadMore(currentPage);
            loading=true;
        }
    }

    public abstract void onLoadMore(int currentPage);

}
           
public class MainActivity extends AppCompatActivity {
    private RecyclerView mRv;
    private List<String> mList;
    private RvAdapter mAdapter;
    

    //資料的總頁數
    private int totalPager=5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initAdapter();
    }
    private void initView() {
        mRv = (RecyclerView) findViewById(R.id.rv);
    }

    private void initData() {

        mList=new ArrayList<>();
        for (int i = 0; i < 30; i++) {
            mList.add("我是條目:"+i);
        }


    }

    private void initAdapter() {
        //初始化擴充卡
        if (mAdapter==null){
            mAdapter=new RvAdapter(mList);
        }

       //ListView形式滑動添加分割線(豎向清單)
        LinearLayoutManager mManager=new LinearLayoutManager(this);
        mRv.setLayoutManager(mManager);
        mRv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

        //條目加載動畫
        mRv.setItemAnimator(new DefaultItemAnimator());

        /**************************加載更多監聽******************************/
        mRv.addOnScrollListener(new LoadMoreListener(mManager) {
            @Override
            public void onLoadMore(int currentPage) {
                //目前的頁數 < 總頁數
                if (currentPage<totalPager) {
                    //去加載更多的資料
                    loadMoreData(currentPage);
                }else{
                     Toast.makeText(MainActivity.this, "大哥沒有更多的資料", Toast.LENGTH_SHORT).show();
                }
            }
        });

        
        mRv.setAdapter(mAdapter);


    }

    private void loadMoreData(int currentPage) {
        for (int i = 0; i < 10; i++) {
            mList.add("新增條目"+i);
        }
        mAdapter.notifyDataSetChanged();
    }

}
           

繼續閱讀