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();
}
}