最近剛學了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的支持庫。