几乎每个app都离不开列表界面,实现的方式也是各种五花八门,随着技术的日新月异,各种相关的控件封装的也越来越彻底,功能越来越强大,本文则详细记录了时下最火的万能适配器BaseQuickAdapter、刷新控件SmartRefreshLayout搭配Recyclerview实现列表的步骤。
国际惯例,先看效果图:
1.首先我们引入各类依赖
打开build.gradle
//recyclerview
implementation 'androidx.recyclerview:recyclerview:1.0.0'
//列表刷新加载控件
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//列表适配器
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
打开project.gradle,添加maven { url "https://jitpack.io" }
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
加载,无报错即添加依赖成功
2.在视图Activity的xml文件中添加控件,即给recyclerview外面套一层刷新控件smartRefreshLayout。
3.接下来新建列表的适配器adapter,继承BaseQuickAdapter
画一个item的xml文件,很简单,就放一个TextView
编辑adapter,通过setText来设置文字,addOnClickListener来设置点击监听。
/** * 列表适配器 * @author created by fantasychong * @date 2020-03-06 */ public class ContentAdapter extends BaseQuickAdapter{ public ContentAdapter(@Nullable List list) { super(R.layout.item_main, list); } @Override protected void convert(BaseViewHolder helper, ContentBean item) { helper.setText(R.id.item_nameTv, item.getName()) .addOnClickListener(R.id.item_nameTv); } }
怎么样?相比BaseAdapter很简洁吧。
4.回到视图Activity,先让列表显示出来,这里就是常规的Recyclerview设置
recyclerview = findViewById(R.id.main_recyclerview); recyclerview.setLayoutManager(new LinearLayoutManager(this)); contentAdapter = new ContentAdapter(new ArrayList()); recyclerview.setAdapter(contentAdapter);
配置数据,由setNewData赋值,即可显示列表。
/** * 配置数据 */ private void initData() { list = new ArrayList<>(); for (int i = 0; i < 5; i++) { list.add(new ContentBean("zhangsan")); } if (contentAdapter != null) { contentAdapter.setNewData(list); } }
跑起来~
给列表设置点击监听。
contentAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { switch (view.getId()) { case R.id.item_nameTv: Toast.makeText(MainActivity.this, ((ContentBean) adapter.getData().get(position)).getName(), Toast.LENGTH_SHORT).show(); break; } } });
5.下面设置下空布局
View view = LayoutInflater.from(this).inflate(R.layout.view_empty, null); contentAdapter.setEmptyView(view);
我们把测试数据调成空,运行!
6.接下来我们设置下SmartRefreshLayout的上拉加载和下拉刷新监听。
smartrefreshlayout = findViewById(R.id.main_smartrefreshlayout); smartrefreshlayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() { @Override public void onLoadMore(@NonNull RefreshLayout refreshLayout) { if (contentAdapter != null) { contentAdapter.addData(list); smartrefreshlayout.finishLoadMore(200); } } @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { initData(); smartrefreshlayout.finishRefresh(200); } });
运行
功能实现了,同时SmartRefreshLayout为我们提供了很多刷新动画,我们修改成经典的文字日期式样的
smartrefreshlayout.setRefreshHeader(new ClassicsHeader(this)); smartrefreshlayout.setRefreshFooter(new ClassicsFooter(this));
运行
至此全部完成,demo附上!
资源下载