感觉最近需要很好的理解Google推出良久的控件,Google对其定位,我们暂且不谈,反正很是灵活和实用。粗浅认识,和ListView和GridView功能和原理“类似”。
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.support.v7.widget.RecyclerView
在使用RecyclerView的过程中,最明显与(ListView和GridView)的区别,是要设置布局管理器:
mRecyclerView.setLayoutManager(layoutManager);
目前可传入的参数有:
LinearLayoutManager
StaggeredGridLayoutManager(瀑布流布局)
GridLayoutManager
接下来就是介绍它对应的适配器,基本流程
(当然网上大家都有自己的方法,不一定都是这么做,仅供参考~)
- 基础适配器
- 依据业务继承基类适配器并封装
简单讲就是继承RecyclerView.Adapter <自定义的ViewHolder>,再具体就是
RecyclerView的源码中有:
public static abstract class Adapter<VH extends ViewHolder>
里面有具体的抽象方法,也是我们开发中需要实现的方法:
public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);
public abstract void onBindViewHolder(VH holder, int position);
public abstract int getItemCount();
如果不按以上方法写该控件适配器,你也可以参考一下以下代码,这是比较中规中矩的写法,当然了,我最早也是
按以下这种早期网络资料上很“成熟”方式写适配器的。(以下只是示例,具体写的话,依据业务具体对待~)
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder > {
private List <String> items;
public MyAdapter (@NonNull List<String> dateItems ) {
this.items = (dateItems != null ? dateItems : new ArrayList<String>());
}
@Override public MyViewHolder onCreateViewHolder (ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.from( viewGroup.getContext ()).inflate(R.layout .item,
viewGroup, false );
return new MyViewHolder(itemView);
}
@Override public void onBindViewHolder (MyViewHolder viewHolder, int position) {
viewHolder.textView .setText(items.get (position));
}
@Override public int getItemCount () {
return (this.items != null) ? this .items. size() : 0 ;
}
protected final static class MyViewHolder extends RecyclerView.ViewHolder {
protected TextView textView ;
public MyViewHolder (View itemView) {
super(itemView);
this.textView = (TextView) itemView.findViewById (R. id.text);
}
}
}