1、配置
博客地址:http://blog.csdn.net/caihongdao123
引用Support v7包:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:recyclerview-v7:21.0.3'
compile 'com.android.support:cardview-v7:21.0.3'
compile 'com.android.support:palette-v7:22.2.0'
}
2.RecyclerView简单介绍
1、RecyclerView也是一个继承ViewGroup的容器控件,用于在有限的界面视图情况下装载更多的内容。
2、RecyclerView虽然是容器控件,但是其布局显示基本都可以通过代码来控制显示,RecyclerView比一般容器控件更自由,用户更容易去定义它的内容显示方式。
recylerView.setLayoutManager(new LinearLayoutManager(context,LinearLayout.VERTICAL, true));
//设置添加删除item时候的动画
recylerView.setItemAnimator(new DefaultItemAnimator());
setLayoutManager()方法参数解释
:
LayoutManager 布局管理参数类型可以有以下几种:
①LinearLayoutManager:线性布局
②GridLayoutManager:网格布局
③StaggeredGridLayoutManager:流式布局
LayoutManager的初始参数:
new LinearLayoutManager(this, LinearLayout.VERTICAL, true)
第一个参数 :Context ,上下文参数,
第二个参数:布局方向LinearLayout.VERTICAL垂直和LinearLayout.HORIZONTAL水平,
第三个参数:为true表示是从Item底部数据开始显示,false就是正常从开头显示。
setItemAnimator()方法:
设置当前RecyclerView数据改变时(添加item或者删除item)整个布局的动画效果。在没有特殊需求下可以试用系统默认的动画。
new DefaultItemAnimator()
2 RecyclerView 适配器
<span style="font-size:18px;">public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private Context context;
private List<ModelBean> list;
private Resources res;
public RecyclerAdapter(Context context, List<ModelBean> list) {
this.context = context;
this.list = list;
res = context.getResources();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_card_view, parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final ModelBean bean = list.get(position);
holder.title.setText(bean.getTitle());
holder.imageView.setImageResource(bean.getResId());
}
@Override
public int getItemCount() {
return null == list ? 0 : list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
private TextView title;
public MyViewHolder(View view) {
super(view);
imageView = (ImageView) view.findViewById(R.id.pic);
title = (TextView) view.findViewById(R.id.name);
}
}
}</span>
打破传统ListView.Adapter的绑定数据方式,通过内部类MyViewHolder继承RecyclerView.ViewHolder封装容器中的ItemView,实现onCreateViewHolder抽象方法来加载ItemView的布局,实现onBindViewHolder抽象方法来绑定容器中的ItemView,进而进行赋值。
3 ItemView点击事件
<span style="font-size:18px;">@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final ModelBean bean = list.get(position);
holder.title.setText(bean.getTitle());
holder.imageView.setImageResource(bean.getResId());
<span style="white-space:pre"> </span>/**
<span style="white-space:pre"> </span>* 调用接口回调
<span style="white-space:pre"> </span>*/
<span style="white-space:pre"> </span>holder.itemView.setOnClickListener(new View.OnClickListener() {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onClick(View v) {
<span style="white-space:pre"> </span>if (null != listener)
listener.onItemClick(position, bean);
}
});
}
/**
* 内部接口回调方法
*/
public interface OnItemClickListener {
void onItemClick(int position, Object object);
}
/**
* 设置监听方法
* @param listener
*/
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}</span>
4 RecyclerView其他方法参考
1、notifyDataSetChanged()//更新所有数据类似ListView.notifyDataSetChanged()方法;
2、notifyItemInserted(int position)//在position位置插入数据的时候更新
3、notifyItemRemoved(int position)//移除postion位置的数据的时候更新
4、notifyItemChanged(int position)//当postion位置数据有改变时候更新
5、notifyItemMoved(int fromPosition, int toPosition)//移除从位置formPosition到toPosition位置数据更新
6、notifyItemRangeChanged(int positionStart, int itemCount)
7、notifyItemRangeInserted(int positionStart, int itemCount)
8、notifyItemRangeRemoved(int positionStart, int itemCount)
欢迎留言和评论!
博客地址:http://blog.csdn.net/caihongdao123
下一篇 Android 5.0+ 解析(二)CardView控件