使用配置
-
在
module
gradle文件中配置:compile 'com.android.support:recyclerview-v7:25.3.0'
-
注意:
-
當存在v7包的另一個控件時,最好保持一致。
compile 'com.android.support:appcompat-v7:25.3.0' compile 'com.android.support:recyclerview-v7:25.3.0'
-
使用介紹
- 和listview一樣,在xml中進行占位;
- 在代碼中找到該控件。
步驟一:準備viewholder
先寫需要加載的xml布局,寫完整布局中控件的id等信息;
-
創建一個類,繼承
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); } }
步驟二:準備adapter
// 推薦采用泛型:class MyAdapter extends RecyclerView.Adapter<TitleViewHold >
創建一個類繼承
RecyclerView.Adapter
-
重寫三個方法
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 // 加載數據 public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { holder.mTextView.setText(mList.get(position)); holder.mTextView1.setText(mList.get(position)); } @Override // 獲取條目個數 public int getItemCount() { return mList.size(); } }
步驟三:加載適配器
注意設置布局管理器!!!
-
可以通過修改布局管理器顯示不同展示樣式,例如瀑布流等。
RecyclerView rv = (RecyclerView) findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); rv.setAdapter(new MyAdapter());
加載多種布局
注意要點:
創建的adapter繼承不需要泛型種類;
多種布局與單一布局區別只是在于adapter的不同;
創建多個viewholder用來加載不同布局;
重寫
getItemCount()
方法獲取布局種類;重寫
getItemViewType()
方法獲取當前的布局類型;在
onCreateViewHolder()
初次判斷需要加載的布局類型,并且實例化對應的viewholder;-
在
onBindViewHolder()
中綁定數據;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; } }
總結:
- RecycleView總體比listview更加靈活,可擴展性不錯,性能優化也可以;
- 關于瀑布流,如果大家認為有必要我再添上吧;
- 有問題隨時交流
- 郵箱: goorwl@163.com
- GitHub