使用配置
-
在
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