RecyclerView 展示内容需要通过Adapter创建viewHoler,viewHolder则匹配需要显示的layout.xml。
步骤:
- 创建XxxAdapter。
建立一个名为XxxAdapter的class,继承自RecyclerView.Adapter,泛型填入稍后需要创建的ViewHolder类型。
XxxAdater的结构:
Adapter 需要从模型层提取数据,因此通常包含一个模型的List。然后创建构造方法,参数为需要传递进来的模型的List,并将成员变量赋值。
然后系统提示需要override三个方法:
public int getItemCount() ,返回整型
方法体通常返回模型List的size()。
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) ,返回一个ViewHolder
方法体为创建一个ViewHolder,创建时需要获得ViewHolder关联的layout文件。
要layout文件正确显示需要通过LayoutInflater填充。
语法为:LayoutInflater inflater=LayoutInflater .from(Context context);
(context 可以通过getActivity获得,也可以通过parent.getContext()获得。)
View view=inflater.inflater(R.layout.xx,parent,false);
false含义为attachToRoot。
如果attachToRoot=true,则layout文件将绑定到root,并返回root的view;如果attachToRoot=false,则layout文件不绑定到root,则返回layout文件为根的View。
public void onBindViewHolder(ViewHolder holder, int position),无返回值,方法可以理解为向viewHolder中的View控件赋值需显示的内容。
position为模型List的中某个实体的下标。
通过初始化模型对象,并对holder中的成员变量赋值,如果ViewHolder中有封装方法,则可在此处调用。
- ViewHolder
ViewHolder相对简单,需要建立layout文件中控件的成员变量,并创建一个参数为View 的构造方法。
成员变量通过View.findViewById(R.Id)初始化。ViewHolder可以直接在Adapter内部通过static 关键字声明,也可以与Adapter同级,在被托管的Fragment里面声明。
如果需要在viewHolder中封装成员变量初始化代码。则可以通过在adapter的onBindViewHolder()里面调用。
在Fragment的onCreateView()里面初始化Adapter。
可以通过封装方法setAdapter()调用,方法体判断adapter是否被添加过。