前言:我们在上一篇文章中学到了Recyclerview但是在现实中往往需求不是那么的简单,可能需要多种需求合并起来,例如常见的上下拉刷新,删除 item 还有多种item,有着头部和尾部等等之类的。这次我们久来学习一个RecyclerView的库,XRecyclerView的他集合了众多的功能,下面就让我来讲解一下如何使用。
步骤:
- 引用 库
- 创建 控件
- 下拉刷新
- 设置上拉下拉刷新的样式
- 创建头部
- 设置上下拉的文字提示语
- 设置刷新的回调
- 更新完毕
- 实战过程
- 彩蛋
- 我的案例
引用库
compile ':xrecyclerview:1.5.8'
创建控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<
android:
android:layout_width="match_parent"
android:layout_height="wrap_content"></>
</LinearLayout>
设置是否可以上下拉刷新(默认是可以的)
(true);
(false);
设置上拉下拉刷新的样式
();
();
(.iconfont_downgrey);
设置头部
recyclerView
.getDefaultRefreshHeaderView()
.setRefreshTimeVisible(true);
View header = (this).inflate(.recyclerview_header,(ViewGroup)findViewById(),false);
(header);
设置上下拉的文字提示语
// ().setLoadingHint("自定义加载中提示");
().setNoMoreHint("自定义加载完毕提示");
设置刷新的回调(onRefrsh为刷新回调,onLoadMore为下拉更新)
(new () {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable(){
public void run() {
InternextData(2);
}
}, 2000);
}
@Override
public void onLoadMore() {
}
});
更新完毕
();
( (body));
();
();
实战过程
- 默认初级进入页面的时候先加载好数据
- 使我们的网络请求函数,多加上一个参数区分 初始化网络 下拉刷新 下拉添加数据的操作
彩蛋
顺便讲一下一点更新数据的问题 ,使用下面语句来更新的时候我们必须更新我一初始化的数据内存,不能让引用指向另一内存
();
我的案例
package ;
import ;
import .;
import .;
import .;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* Created by jie on 2018/8/17.
*/
public class Demo extends BaseActivity {
List<ReadAllLock> lists = new ArrayList<>();
private XRecyclerView recyclerView;
private DemoAdapter adapter;
@Override
public int getLayoutId() {
return ;
}
@Override
public void initViews() {
recyclerView = findView();
initR();
}
/**
* 初始化控件
*/
private void initR() {
/*
* 默认为垂直向下的列表格式
*/
LinearLayoutManager layoutmanager = new LinearLayoutManager(getApplication());
/**
* 设置为水平布局格式
*/
// ();
/*
* 瀑布格式
* 第一个参数表示布局的列数
* 第二个参数表示布局的方向,这里我们传入,表示布局纵向排列
*/
// StaggeredGridLayoutManager layoutmanager = new StaggeredGridLayoutManager(2, );
//设置RecyclerView 布局
(layoutmanager);
(true);
(false);
();
();
(.iconfont_downgrey);
recyclerView
.getDefaultRefreshHeaderView()
.setRefreshTimeVisible(true);
View header = (this).inflate(.recyclerview_header, (ViewGroup)findViewById(),false);
(header);
// ().setLoadingHint("自定义加载中提示");
().setNoMoreHint("自定义加载完毕提示");
}
/**
* 初始化点击事件
*/
@Override
public void initListener() {
(new () {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable(){
public void run() {
InternextData(2);
}
}, 2000);
}
@Override
public void onLoadMore() {
}
});
}
/**
* 初始化数据
*/
@Override
public void initData() {
InternextData(1);
}
/**
* 获取数据
* @param type tyoe==1 初次获取数据 type == 2 刷新获取数据 type == 3 下拉更新数据
*/
private void InternextData(final int type) {
LockController lockController = new LockController();
List<String> photos = new ArrayList<>();
List<> parts = null;
Map<String, RequestBody> params = new HashMap<>();
("phone", ("17875305749"));
("password", ("1234567"));
(params, parts, new () {
@Override
public void onSuccess(Object success) {
String body = ();
("onSuccess:", body);
switch (type){
case 1:
lists = (body);
//设置Adapter
adapter = new DemoAdapter(lists);
(new () {
@Override
public void onLongClick(int position) {
(, "onLongClick事件 您点击了第:" + position + "个Item", Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(int position) {
(, "onClick事件 您点击了第:" + position + "个Item", Toast.LENGTH_SHORT).show();
}
});
(adapter);
();
break;
case 2:
();
( (body));
();
();
break;
default:
break;
}
}
@Override
public void onError(String error) {
showToast(error);
}
@Override
public void onComplete() {
}
});
}
@Override
public void processClick(View v) {
}
}
thanks