RecyclerView
一、简介
这个是谷歌官方出的控件,使我们可以非常简单的做出列表装的一个控件,当然recyclerview的功能不止这些,它还可以做出瀑布流的效果,这是一个非常强大的控件,内部自带viewholder可以使我们非常简单的完成许多操作,正在一步一步取代listview这个控件,当然它也有一些小的缺点,那就是谷歌官方并没有直接给我写出它的点击事件的接口,但是这并难不倒我们,我们可以自己写一个回调的接口,实现点击事件,在这里我不仅要为大家介绍recyclerview的item的点击事件,还要为大家介绍,一个item中局部的点击事件,还有添加header、footer,还有添加不同类别的item的布局。可以说彻底的读懂了这篇文章,我们对recyclerview就有了一个新的认识了。
二、涉及到的知识点
- item的点击事件
- item里面内容的点击事件
- 为recycler view添加header和footer
- 为item添加不同的布局
三、实现代码
/**
* Created by linSir on 16/7/24.管理地址界面的适配器
*/
public class ManageAddressAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
//在这里我们要继承自官方为我们写好的适配器
public OnTitleClickListener mListener;
private List<AllAddress> mList; //用户列表
public ManageAddressAdapter() {
mList = new ArrayList<>();
}
public void setList(List<AllAddress> list) {
//从外界传入一个list
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//重写方法,用上我们下面写好的viewHoler
return new ManageAddressViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_manage_address, parent, false));
}
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//在这里我们将数据和控件绑定起来
ManageAddressViewHolder mHolder = (ManageAddressViewHolder) holder;
mHolder.userName.setText(mList.get(position).getShipName());
mHolder.userTel.setText(mList.get(position).getPhone());
String address = mList.get(position).getProvince() + " " + mList.get(position).getCity()
+ " " + mList.get(position).getArea() + " " + mList.get(position).getDetail();
mHolder.address.setText(address);
mHolder._default.setOnClickListener(new ClickListener(String.valueOf(position)));//在这里我们设置了点击事件
}
@Override public int getItemCount() {
return mList.size();
}
public static class ManageAddressViewHolder extends RecyclerView.ViewHolder {
private TextView userName;
private TextView userTel;
private TextView address;
private TextView _default;
public ManageAddressViewHolder(View itemView) {
super(itemView);
userName = (TextView) itemView.findViewById(R.id.manage_userName);
userTel = (TextView) itemView.findViewById(R.id.manage_userTel);
address = (TextView) itemView.findViewById(R.id.manage_userAddress);
_default = (TextView) itemView.findViewById(R.id.manage_default);
}
}
public class ClickListener implements View.OnClickListener {
//在这里我们重写了点击事件
private String id;
public ClickListener(String id) {
this.id = id;
}
@Override public void onClick(View view) {
if (mListener != null) {
mListener.onTitleClick(id);
}
}
}
public void setOnTitleClickListener(OnTitleClickListener listener) {
//自己写了一个方法,用上我们的接口
mListener = listener;
}
public interface OnTitleClickListener {
//自己写了一个点击事件的接口
void onTitleClick(String id);
}
}
通过以上的代码,我