首先明确几个关键概念
- LCE (loading,content,error)这三种状态
- refresh,loadmore,这两种功能
在以往开发过程中,我们使用recyclerview的场景是很多的,特别是获取数据,然后填充到列表中。
现在我们来看看使用这个lceview 有多快吧
我们模拟网络请求,并显示如下
-
在build.gradle中
dataBinding { enabled true }
compile project(":lceview")
-
在layout中
<com.chaochuandea.lceview.lcerecyclerview.LCERecyclerView android:layout_width="match_parent" android:id="@+id/recyclerview" android:layout_height="match_parent"/>
-
声明数据源
public class MyDataEntityt{ int code; String text; List<MyItem> data = new ArrayList(); ...set and get method } public class MyItem{ String name; String face; ...set and get method } public class HeaderEntity{ }
-
声明两个layout,header.xml,item.xml
header.xml
<?xml version="1.0" encoding="utf-8"?>
@Override
public String getUrl() {
return "这是网络获取的地址";
}
@Override
public HashMap<String, Object> getParams() {
//这是需求参数
return null;
}
@Override
public void getViewTypeAndLayout(MV<Class, Integer> mv) {
//item 数据和layout 的对应关系
mv.with(MyItem.class,R.layout.item)
.with(HeaderEntity.class,R.layout.header);
}
@Override
public List<Object> onDataChange(List<MyDataEntityt> myDataEntityts) {
List<Object> deals = new ArrayList<Object>();
deals.add(new HeaderEntity());
for (int i = 0; i < myDataEntityts.size(); i++) {
deals.addAll(myDataEntityts.get(i).getData());
}
return deals;
}
@Override
public void onBind(BindingHolder holder, Object data, Class data_type, int position) {
if (data instanceof MyItem){
MyItem item = (MyItem) data;
ItemBinding itemBinding = (ItemBinding) holder.getBinding();
itemBinding.face.setText(item.getFace());
}
}
});
```