mRecyclerView滑動(dòng)到底部的監(jiān)聽(tīng)
mRecyclerView.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);
if (mCurrentState == ACTION_IDLE && isLoadMoreEnabled && checkIfLoadMore()) {
mCurrentState = ACTION_LOAD_MORE_REFRESH;
mSwipeRefreshLayout.setEnabled(false);
listener.onRefresh(ACTION_LOAD_MORE_REFRESH);
}
}
});
checkIfLoadMore()
重點(diǎn)看一下checkIfLoadMore()這個(gè)方法,這個(gè)方法用來(lái)判斷界面上最后一個(gè)位置和itemcount的比較,因?yàn)镽ecyclerView的LayoutManager有三種,這個(gè)如果用If else來(lái)進(jìn)行判斷,過(guò)于冗余,我們這個(gè)采用策略模式來(lái)進(jìn)行編寫(xiě)。
public interface ILayoutManager {
int findLastVisiblePosition();
RecyclerView.LayoutManager getLayoutManager();
}
public class MyLinearLayoutManager extends LinearLayoutManager implements ILayoutManager {
public MyLinearLayoutManager(Context context) {
super(context);
}
public MyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public MyLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public RecyclerView.LayoutManager getLayoutManager() {
return this;
}
@Override
public int findLastVisiblePosition() {
return findLastVisibleItemPosition();
}
}
private boolean checkIfLoadMore() {
int lastVisibleItemPosition = mLayoutManager.findLastVisiblePosition();
int totalCount = mLayoutManager.getLayoutManager().getItemCount();
return totalCount - lastVisibleItemPosition < 5;
}
加載完成后
因?yàn)槲覀兯⑿潞图虞d調(diào)用同一個(gè)接口,傳遞不同的參數(shù),所以在操作完成后,我們需要進(jìn)行判斷,是哪種操作完成了
public void onRefreshCompleted() {
switch (mCurrentState) {
case ACTION_PULL_TO_REFRESH:
mSwipeRefreshLayout.setRefreshing(false);
break;
case ACTION_LOAD_MORE_REFRESH:
if (isPullToRefreshEnabled) {
mSwipeRefreshLayout.setEnabled(true);
}
break;
default:
break;
}
mCurrentState = ACTION_IDLE;
}