三個重要組件
Adapter痢掠、ViewHolder、item.xml
ViewHolder僅僅包含視圖,生成ViewHolder時候
ViewHolder holder = new ViewHolder(inflater.inflate(R.layout.item_list,parent,false));
傳入視圖文件,viewHolder中的itemView會引用整個視圖黔漂,并能通過findviewById的方式訪問到視圖中的每個組件。
RecyclerView自己不能創(chuàng)造視圖禀酱,必須通過Adapter炬守,Adapter有兩個作用:
- 創(chuàng)建ViewHolder
- 將模型數(shù)據(jù)綁定在視圖上
RecyclerView需要顯示數(shù)據(jù)時候,通過getItemCount確認(rèn)生成的item數(shù)量剂跟,并循環(huán)調(diào)用OncreateViewHolder和OnBindViewHolder方法劳较。生成多個綁定了數(shù)據(jù)的View。不過當(dāng)視圖數(shù)量足夠填滿屏幕之后浩聋,RecyclerView就不會繼續(xù)創(chuàng)建視圖观蜗,而是當(dāng)用戶滑動屏幕時候回收利用之前創(chuàng)建的視圖。
RecyclerView添加點(diǎn)擊事件
public CrimeHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.list_item_crime, parent, false));
itemView.setOnClickListener(this);
mTitleTextView = (TextView) itemView.findViewById(R.id.crime_title);
mDateTextView = (TextView) itemView.findViewById(R.id.crime_date);
}
@Override
public void onClick(View view) {
Toast.makeText(getActivity(),
mCrime.getTitle() + " clicked!", Toast.LENGTH_SHORT)
.show();
}
RecyclerView拓展性更強(qiáng)衣洁,比如水平向滾動墓捻、列表項動畫效果、移動列表等,如
//從位置零移動到位置5
//通過getItemViewType(int)返回不同的列表項類型以加載不同的itemView