RecyclerView完全解析
2016-06-26 11:46
357 查看
1)RecyclerView是什么?
是一种新的视图组,可完全代替ListView和GridView,可以为任何基于适配器的视图提供相似的渲染方式,在有限的窗口中展示大量的数据集;高度解耦、异常灵活;可通过设置不同的LayoutManager、ItemDecoration和ITEMAnimator来实现不同的效果。
2)使用步骤
①加入依赖
compile 'com.android.support:recyclerview-v7:21.0.+'
②将RecyclerView加入布局文件中
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
③在代码中得到RecyclerView控件的实例
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
④配置RecyclerView的数据源,一般在项目中都是由网络操作得到数据后,封装到Bean中,然后加入到List<Bean>中作为数据源
⑤实现RecyclerView的Adapter适配器
->继承RecyclerView.Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
->实现ViewHolder类,ViewHolder主要用来加载View(findByView方法),配置每个Item的监听器
class ViewHolder extends RecyclerView.ViewHolder{
private TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.text_title);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener != null){
listener.onItemClicked(view, getLayoutPosition(), datas.get(getLayoutPosition()));
}
}
});
}
}
->实现适配器的构造器,将参数传入
public MyAdapter(Context context, List<String> datas) {
this.datas = datas;
mLayoutInflater = LayoutInflater.from(context);
}
->实现OnCreateView方法,主要就是为了将ItemView的布局文件传给ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(mLayoutInflater.inflate(R.layout.template_home_cardview, parent, false));
}
->实现onBindView方法,主要是为了将数据与空间进行绑定,将数据装载到控件中
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(datas.get(position));
}
->实现Adapter的其他方法
->为Adapter提供监听器,此监听器会绑定到每个Item上
private OnItemClickListener listener;
public void setListener(OnItemClickListener listener) {
this.listener = listener;
}
public interface OnItemClickListener{
void onItemClicked(View view, int position, String str);
}
@Override
public void onClick(View view) {
if(listener != null){
listener.onItemClicked(view,getLayoutPosition(), datas.get(getLayoutPosition()));
}
}
->为Adapter提供公共方法以供外界调用,如增加数据、删除数据等等。。。
public void addData(int position, String str){
datas.add(position, str);
notifyItemInserted(position);
}
public void removeData(int position){
datas.remove(position);
notifyItemRemoved(position);
}
⑥实例化Adapter,将数据传入
adapter = new MyAdapter(HomeFragment.this.getActivity(), datas);
⑦为每个Item设置监听器
adapter.setListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClicked(View view, int position, String str) {
Toast.makeText(getContext(), str, Toast.LENGTH_LONG).show();
}
});
⑧为RecyclerView绑定适配器
mRecyclerView.setAdapter(adapter);
⑨为RecyclerView设置布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(HomeFragment.this.getActivity()));
或
mRecyclerView.setLayoutManager(new GridLayoutManager(HomeFragment.this.getActivity(),3));
⑩设置Decoration和Animator
mRecyclerView.addItemDecoration(new DividerItemDecoration(HomeFragment.this.getContext(), DividerItemDecoration.HORIZONTAL_LIST));
mRecyclerView.addItemAnimator();
现在,一个RecyclerView就已经可以使用了,更多的,比如结合CardView实现、通用Adapter的实现,图片加载的优化(Picasso)都会在后面进行讲解。
是一种新的视图组,可完全代替ListView和GridView,可以为任何基于适配器的视图提供相似的渲染方式,在有限的窗口中展示大量的数据集;高度解耦、异常灵活;可通过设置不同的LayoutManager、ItemDecoration和ITEMAnimator来实现不同的效果。
2)使用步骤
①加入依赖
compile 'com.android.support:recyclerview-v7:21.0.+'
②将RecyclerView加入布局文件中
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
③在代码中得到RecyclerView控件的实例
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
④配置RecyclerView的数据源,一般在项目中都是由网络操作得到数据后,封装到Bean中,然后加入到List<Bean>中作为数据源
⑤实现RecyclerView的Adapter适配器
->继承RecyclerView.Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
->实现ViewHolder类,ViewHolder主要用来加载View(findByView方法),配置每个Item的监听器
class ViewHolder extends RecyclerView.ViewHolder{
private TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.text_title);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener != null){
listener.onItemClicked(view, getLayoutPosition(), datas.get(getLayoutPosition()));
}
}
});
}
}
->实现适配器的构造器,将参数传入
public MyAdapter(Context context, List<String> datas) {
this.datas = datas;
mLayoutInflater = LayoutInflater.from(context);
}
->实现OnCreateView方法,主要就是为了将ItemView的布局文件传给ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(mLayoutInflater.inflate(R.layout.template_home_cardview, parent, false));
}
->实现onBindView方法,主要是为了将数据与空间进行绑定,将数据装载到控件中
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(datas.get(position));
}
->实现Adapter的其他方法
->为Adapter提供监听器,此监听器会绑定到每个Item上
private OnItemClickListener listener;
public void setListener(OnItemClickListener listener) {
this.listener = listener;
}
public interface OnItemClickListener{
void onItemClicked(View view, int position, String str);
}
@Override
public void onClick(View view) {
if(listener != null){
listener.onItemClicked(view,getLayoutPosition(), datas.get(getLayoutPosition()));
}
}
->为Adapter提供公共方法以供外界调用,如增加数据、删除数据等等。。。
public void addData(int position, String str){
datas.add(position, str);
notifyItemInserted(position);
}
public void removeData(int position){
datas.remove(position);
notifyItemRemoved(position);
}
⑥实例化Adapter,将数据传入
adapter = new MyAdapter(HomeFragment.this.getActivity(), datas);
⑦为每个Item设置监听器
adapter.setListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClicked(View view, int position, String str) {
Toast.makeText(getContext(), str, Toast.LENGTH_LONG).show();
}
});
⑧为RecyclerView绑定适配器
mRecyclerView.setAdapter(adapter);
⑨为RecyclerView设置布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(HomeFragment.this.getActivity()));
或
mRecyclerView.setLayoutManager(new GridLayoutManager(HomeFragment.this.getActivity(),3));
⑩设置Decoration和Animator
mRecyclerView.addItemDecoration(new DividerItemDecoration(HomeFragment.this.getContext(), DividerItemDecoration.HORIZONTAL_LIST));
mRecyclerView.addItemAnimator();
现在,一个RecyclerView就已经可以使用了,更多的,比如结合CardView实现、通用Adapter的实现,图片加载的优化(Picasso)都会在后面进行讲解。
相关文章推荐
- 深入理解计算机中的 csapp,h和csapp.c
- 四大组件之一 --Services介绍和使用
- 数字的推理
- word怎么使用crtl+d删除一行
- 【GOF23设计模式】_迭代器模式_JDK内置迭代器_内部类迭代器JAVA244
- UEFI和Legacy及UEFI+Legacy启动的区别
- JAVA WEB关于文件开发相关问题
- Json字符串的处理
- VS2005编译器自定义宏__FILE__,__LINE__,__TIME__
- Java基础知识
- 雨霖铃·江天破晓
- C++函数返回引用的情况说明
- 添加ES6的支持
- Tomcat多域名配置,让Tomcat跑多网站
- KMP算法实现代码
- 第28课 Spark天堂之门解密
- 单总线和多总线的区别
- 主题摄影 - 专业风光摄影
- C#并行编程-并发集合
- 抓包工具Fidder详解(主要来抓取Android中app的请求)