版权声明:本文为博主原创文章,未经博主允许不得转载。
特别声明:本系列文章leicher著作权所有,转载请注明出处。
渊源
想必大家对RecyclerView上拉刷新和下拉加载并不陌生,可是在大多数的开源框架中大多使用比较死板的方式提供给开发者(即拓展性极差)。本篇博客就是介绍开源框架LRecyclerView的使用。github 地址:https://github.com/leicher/lrecyclerview由于Header 和 Footer 以及 Empty 使用方式差不多,在这里就简单介绍一下Header的使用。下面是代码:
public class SimpleFooter extends HeaderWrapper {
public SimpleFooter(Context context) {
super(context);
}
...
}
自己的定义的 Header 必须继承自HeaderWrapper,并实现其中的方法。在其中继承的方法中实现自己的逻辑。
- 在你的activity 中
public class LRecyclerViewActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LrecyclerView recycler = (LRecyclerView) findViewById(R.id.recycler);
GridLayoutManager manager = new GridLayoutManager(this,2);
recycler.setLayoutManager(manager);
SparseIntArray layouts = new SparseIntArray();
layouts.put(1,R.layout.img_item);
layouts.put(2,R.layout.text_item);
recycler.setAdapter(new MultiTypeAdapter<String>().list(list)
.generator(new LAdapter.TypeGenerator<MultiTypeAdapter<String>>() {\n
@Override
public int generate(MultiTypeAdapter<String> adapter, int position) {
return position % 3 == 0 ? position % 2 == 0 ? 1 : 2 : 1;
}
}).layouts(layouts).binder(new LAdapter.TypeBinder<MultiTypeAdapter<String>>() {
@Override
public void bind(MultiTypeAdapter<String> adapter, LHolder holder, int position, int viewType) {
if (viewType == 1){
holder.setImage(R.id.img,R.mipmap.ic_launcher);
}else {
holder.setText(R.id.text,position + "");
}
}
}));
recycler.setRefreshEnable(true);
recycler.setHeader(new SimpleHeader(this));
recycler.addRefreshListener(this);
recycler.setLoadEnable(true);
SimpleFooter simpleFooter = new SimpleFooter(this);
recycler.setFooter(simpleFooter);
recycler.setMode(LRecyclerView.LOAD_MODE_DEFAULT);
recycler.setComputeBottom(3);
SimpleEmpty simpleEmpty = new SimpleEmpty(this);
recycler.setEmpty(simpleEmpty);
}
}
注意:
- loadmore 的加载模式有两种,LRecyclerView.LOAD_MODE_DEFAULT为当滑动到倒数的某一个position时就会触发加载回调,LRecyclerView.LOAD_MODE_PULL 为上拉触发加载。
- recycler.setComputeBottom(3);意思是当距离底部还有3个position的时候就触发加载回调,仅在默认模式下有效。
- 设置了enable 并且 设置 header 才会真正让刷新有效,加载亦然。
- EmptyWrapper 有很多种状态,譬如有闲置、加载中、加载失败等、均可自行继承处理。
集成进项目
dependencies {
compile 'leicher:lrecyclerview:1.0.1'
}