Android RecyclerView(四)继续学习BRVAH
学玩这章你会啥
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.再给你这三个方法理一下
加载完成(注意不是加载结束,而是本次数据加载结束并且还有下页数据)
meAdapter.loadMoreComplete();
加载失败
meAdapter.loadMoreFail();
加载结束
meAdapter.loadMoreEnd();
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官方使用指南
有啥疑问可以评论留言
吗?