最近刚学了RecyclerView,就来总结下。
RecyclerView的任务仅仅只是回收和定位。要想其显示数据还需要另外俩个类:Adpter子类以及ViewHolder子类。
ViewHolder只做一件事:容纳View视图。RecyclerView自身并不创建视图,它创建的是ViewHolder,而ViewHolder引用着一个个ItemView。
典型的ViewHolder子类写法:
private class MyHolder extends RecyclerView.ViewHolder{
private TextView title;
public MyHolder(View itemView){
super(itemView);
title=(TextView)itemView.findViewById(R.id.list_item_title);
}
RecyclerView.Adapter有三个抽象方法,使用时需覆盖:
① int getItemCount()
该方法返回适配器持有集合中的数据总数,比如说传给Adapter的List列表中的item总数。
② void onBindViewHolder (VH holder,int position)
该方法是一个回调方法,RecyclerView通常回调该方法来显示数据。position参数可以指定当前的数据位置。
③ VH onCreateViewHolder(ViewGroup parent, int viewType)
该方法通常用来调用VH来装载一个RecyclerView中的Item。
下面是一个例子:
private class NoteBookAdapter extends RecyclerView.Adapter<MyHolder>{
private NoteBookItem mBookItem;
public NoteBookAdapter(List<NoteBookItem> list){
mNoteBookList=list;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent,int type){ //创建ViewHolder容纳View视图
View v=LayoutInflater.from(getActivity()).inflate(R.layout.note_book_item,parent,false);
return new MyHolder(v);
}
@Override
public void onBindViewHolder(MyHolder holder, int position){ //这里通常用来绑定数据至模型层
mBookItem=mNoteBookList.get(position);
holder.bindItem(mBookItem); //绑定数据到RecyclerView中的每一个Item
}
@Override
public int getItemCount(){ //这里用来返回List列表中的数目
return mNoteBookList.size();
}
}
最后再给RecyclerView添加适配器以及设置LayoutManager(LayoutManager还有许多第三方库实现版本,这里使用LinearLayout)如下:
List<NoteBookItem> bookItems=new ArrayList<>();
mRecyclerView.setAdpter(new NoteBookAdapter(new NoteBookAdapter(bookItems)));
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity));
还有最后别忘了添加RecyclerView的支持库。