學玩這章你會啥
RecyclerView的下面幾點可還ok。
- 上拉重新整理
- 下拉加載
- 拖動
- 滑動删除
上拉重新整理
1.方法setOnLoadMoreListener();
//下拉加載
meAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
//顯示條目長度
int dataSize;
//假設資料庫查詢到了20條資料
int sqlDataSize=20;
boolean isErr=false;
@Override public void onLoadMoreRequested() {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
if (dataSize >= sqlDataSize) {
//資料全部加載完畢
meAdapter.loadMoreEnd();
} else {
if (isErr) {
//成功擷取更多資料
meAdapter.addData(getData());
dataSize = meAdapter.getData().size();
meAdapter.loadMoreComplete();
} else {
//擷取更多資料失敗
isErr = true;
Toast.makeText(MainActivity.this, "擷取資料失敗", Toast.LENGTH_LONG).show();
meAdapter.loadMoreFail();
}
}
}
}, 1000);
}
}, recyclerView);
2.在看看我們的getData()方法
public List<User> getData() {
//每次添加兩條
List<User> users=new ArrayList<>();
users.add(new User(R.drawable.tx,"上啦1"));
users.add(new User(R.drawable.tx0,"上啦2"));
return users;
}
3.再給你這三個方法理一下
加載完成(注意不是加載結束,而是本次資料加載結束并且還有下頁資料)
加載失敗
加載結束
4.如果出現了錯誤
Landroid/support/v4/animation/AnimatorCompatHelper;
Android 報錯-6
會告訴你解決方法
坑都被我踩完了。。。
5.效果圖
點選重試
繼續下拉,最後
下拉加載
1.打開下拉加載開關
//開啟下拉加載開關
meAdapter.setUpFetchEnable(true);
2.設定監聽
//下拉加載
meAdapter.setUpFetchListener(new BaseQuickAdapter.UpFetchListener() {
@Override
public void onUpFetch() {
startUpFetch();
}
});
3.startUpFetCh()方法的實作
private int count=0;
private void startUpFetch() {
count++;
meAdapter.setUpFetching(true);
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
//getData()就是上拉重新整理的方法,一次加載兩條
meAdapter.addData(0, getData());
meAdapter.setUpFetching(false);
if (count > 2) {//預設加載兩次
//加載後關閉開關
meAdapter.setUpFetchEnable(false);
}
}
}, 300);//0.3秒一次
}
4.效果圖
這是進去的效果圖
然後我們下拉
由于引用的是上拉的getData方法是以名稱沒改了。
拖動和滑動删除
1.改一下我們的meAdapter繼承BaseItemDraggableAdapter然後alt+enter,平常沒事可以多ctrl點選進去瞧一瞧,看一看。會有大發現,我隻不過發現了BaseItemDraggableAdapter繼承的還是BaseQuickAdapter而已
public class MeAdapter extends BaseItemDraggableAdapter<User,BaseViewHolder> {
public MeAdapter(int layoutResId, @Nullable List<User> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, User item) {
helper.setImageResource(R.id.iv_user_img,item.getImg())
.setText(R.id.tv_user_name,item.getName())
.addOnClickListener(R.id.iv_user_img)
.addOnLongClickListener(R.id.iv_user_img);
}
}
2.編寫它們的回調方法
//拖拽回調方法
OnItemDragListener onItemDragListener = new OnItemDragListener() {
@Override
public void onItemDragStart(RecyclerView.ViewHolder viewHolder, int pos){}
@Override
public void onItemDragMoving(RecyclerView.ViewHolder source, int from, RecyclerView.ViewHolder target, int to) {}
@Override
public void onItemDragEnd(RecyclerView.ViewHolder viewHolder, int pos) {}
};
//滑動回調方法
OnItemSwipeListener onItemSwipeListener = new OnItemSwipeListener() {
@Override
public void onItemSwipeStart(RecyclerView.ViewHolder viewHolder, int pos) {}
@Override
public void clearView(RecyclerView.ViewHolder viewHolder, int pos) {}
@Override
public void onItemSwiped(RecyclerView.ViewHolder viewHolder, int pos) {}
@Override
public void onItemSwipeMoving(Canvas canvas, RecyclerView.ViewHolder viewHolder, float dX, float dY, boolean isCurrentlyActive) {
}
};
3.活動的調用
ItemDragAndSwipeCallback itemDragAndSwipeCallback = new ItemDragAndSwipeCallback(meAdapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemDragAndSwipeCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
// 開啟拖拽
meAdapter.enableDragItem(itemTouchHelper, R.id.item_user, true);
meAdapter.setOnItemDragListener(onItemDragListener);
// 開啟滑動删除
meAdapter.enableSwipeItem();
meAdapter.setOnItemSwipeListener(onItemSwipeListener);
recyclerView.setAdapter(meAdapter);
4.效果圖
這是滑動删除
在看看我們的拖動
付
基本的RecyclerView萬能擴充卡就到這了
更詳細的請看
BRVAH官方使用指南
有啥疑問可以評論留言
嗎?