使用配置
-
在
modulegradle文件中配置:compile 'com.android.support:recyclerview-v7:25.3.0' -
注意:
-
當(dāng)存在v7包的另一個(gè)控件時(shí),最好保持一致。
compile 'com.android.support:appcompat-v7:25.3.0' compile 'com.android.support:recyclerview-v7:25.3.0'
-
使用介紹
- 和listview一樣,在xml中進(jìn)行占位;
- 在代碼中找到該控件。
步驟一:準(zhǔn)備viewholder
先寫(xiě)需要加載的xml布局,寫(xiě)完整布局中控件的id等信息;
-
創(chuàng)建一個(gè)類,繼承
RecyclerView.ViewHolder,并找出需要加載xml的控件生成為成員方法。class TitleViewHold extends RecyclerView.ViewHolder { private final TextView mTextView; private final TextView mTextView1; public TitleViewHold(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.textView); mTextView1 = (TextView) itemView.findViewById(R.id.textView2); } }
步驟二:準(zhǔn)備adapter
// 推薦采用泛型:class MyAdapter extends RecyclerView.Adapter<TitleViewHold >
創(chuàng)建一個(gè)類繼承
RecyclerView.Adapter-
重寫(xiě)三個(gè)方法
class MyAdapter extends RecyclerView.Adapter{ @Override // 綁定布局 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(Test.this).inflate(R.layout.title_view, parent, false); return new TitleViewHold(inflate); } @Override // 加載數(shù)據(jù) public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { holder.mTextView.setText(mList.get(position)); holder.mTextView1.setText(mList.get(position)); } @Override // 獲取條目個(gè)數(shù) public int getItemCount() { return mList.size(); } }
步驟三:加載適配器
注意設(shè)置布局管理器?。。?/p>
-
可以通過(guò)修改布局管理器顯示不同展示樣式,例如瀑布流等。
RecyclerView rv = (RecyclerView) findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); rv.setAdapter(new MyAdapter());
加載多種布局
注意要點(diǎn):
創(chuàng)建的adapter繼承不需要泛型種類;
多種布局與單一布局區(qū)別只是在于adapter的不同;
創(chuàng)建多個(gè)viewholder用來(lái)加載不同布局;
重寫(xiě)
getItemCount()方法獲取布局種類;重寫(xiě)
getItemViewType()方法獲取當(dāng)前的布局類型;在
onCreateViewHolder()初次判斷需要加載的布局類型,并且實(shí)例化對(duì)應(yīng)的viewholder;-
在
onBindViewHolder()中綁定數(shù)據(jù);public class MyAdapter extends RecyclerView.Adapter { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case TYPE_TITLE: return new TitleViewHold(LayoutInflater.from(MainActivity.this).inflate(R.layout.title_view, parent, false)); case TYPE_CONTENT: return new ContentHold(LayoutInflater.from(MainActivity.this).inflate(R.layout.content, parent, false)); } TitleViewHold titleViewHold = new TitleViewHold(LayoutInflater.from(parent.getContext()).inflate(R.layout.title_view, parent, false)); return titleViewHold; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof TitleViewHold) { ((TitleViewHold) holder).mTextView.setText(mList.get(position)); ((TitleViewHold) holder).mTextView1.setText(mList.get(position)); } else { ((ContentHold) holder).mTv.setText(mList1.get(position)); } } @Override public int getItemCount() { return mList.size(); } @Override public int getItemViewType(int position) { if (position % 2 == 0) { return TYPE_TITLE; } else return TYPE_CONTENT; } }
總結(jié):
- RecycleView總體比listview更加靈活,可擴(kuò)展性不錯(cuò),性能優(yōu)化也可以;
- 關(guān)于瀑布流,如果大家認(rèn)為有必要我再添上吧;
- 有問(wèn)題隨時(shí)交流
- 郵箱: goorwl@163.com
- GitHub