RecyclerView的使用

来源:互联网 发布:mac个人文件存放在哪里 编辑:程序博客网 时间:2024/05/16 13:50
RecyclerView 是在Android5.0之后推出的,是一个比ListView更加灵活更加高效的适配器类型控件。但是RecyclerView不同于其他类型的适配器,它还需要一个LayoutManager进行页面控制展示。
RecyclerView提供了三种布局管理器:
  1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果。
  2、GridLayoutManager:网格布局管理器,支持水平和垂直效果。
  3、StaggeredGridLayoutManager:分布型管理器,瀑布流效果
RecyclerView的使用:
  1、引入RecyclerView依赖包,V7下的,兼容到API17.
  2、在xml布局中声明,在Java代码中初始化。
  3、设置布局管理器
  4、创建适配器,设置数据源,绑定适配器
    具体创建适配器:①创建一个类,继承RecyclerView.Adapter<ViewHolder>.
            ②创建一个类ViewHolder,继承RecyclerView。VIewHolder,该类需要创建一个匹配父类的构造。
            ③重写适配器中的方法:getItemCount():获取数据源的个数(item的数量);onCreateViewHolder():该方法中导入布局,实例化VIewHolder;onBindViewHolder():绑定VIewHolder,加载数据。

具体代码:
适配器Adapter中:
public class MyRecyclerviewAdapter extends RecyclerView.Adapter<MyViewHolder> {    private Context context;    private List<Bean.DataBean.ForumListBean.GroupBean> list;    public MyRecyclerviewAdapter(Context context, List<Bean.DataBean.ForumListBean.GroupBean> list) {        this.context = context;        this.list = list;    }    @Override    public int getItemViewType(int position) {        return super.getItemViewType(position);    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        MyViewHolder holder=new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recycler_item,parent));        return holder;    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        holder.tv.setText(list.get(position).getName());    }    @Override    public int getItemCount() {        return list.size();    }}class MyViewHolder extends RecyclerView.ViewHolder{    TextView tv;    ImageView iv;    public MyViewHolder(View itemView) {        super(itemView);        iv= (ImageView) itemView.findViewById(R.id.iv_image);        tv=(TextView) itemView.findViewById(R.id.tv_name);    }}

activity代码:
mrecycler = (RecyclerView) findViewById(R.id.recycler);//设置布局管理器//listviewmrecycler.setLayoutManager(new LinearLayoutManager(this));//gridview// mrecycler.setLayoutManager(new GridLayoutManager(this,4));//瀑布流// mrecycler.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//设置adapteradapter = new MyRecyclerAdapter(this, list);mrecycler.setAdapter(adapter);

由于RecyclerView 为开发者提供了强大的复用机制,但是所有的点击事件都丢了,没有提供默认的点击事件,所以需要我们自己为RecyclerView手动实现点击。
首先创建一个类,实现RecyclerView的OnItemTouchListener,重写方法:
package com.bwei.test.lianxi.util;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;/** * Created by zhangjie on 2016/11/11. */public class RecyclerItem  implements RecyclerView.OnItemTouchListener{    private OnItemClickListener mListener;    public interface OnItemClickListener {        public void onItemClick(View view, int position);    }    GestureDetector mGestureDetector;    public RecyclerItem(Context context, OnItemClickListener listener) {        mListener = listener;        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {            @Override public boolean onSingleTapUp(MotionEvent e) {                return true;            }        });    }    @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {        View childView = view.findChildViewUnder(e.getX(), e.getY());        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {            mListener.onItemClick(childView, view.getChildPosition(childView));            return true;        }        return false;    }    @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }}



0 0
原创粉丝点击