Android的RecyclerView的使用总结

来自: http://my.oschina.net/fbf8866/blog/625902


     RecycleView是V7包下的,可以说是ListView的升级版,因为ListView是不支持横向滑动,而RecycleView既支持横向也支持纵向滑动,使用很方便,但是有一点坑爹的就是没有条目的点击事件,需要我们自己来写

    首先Activity的布局如下:

    

    Item的布局我只是用一个简单的TextView来写的,所以就不传图了;

    然后在Activity中的onCreat方法中,获取到RecyclerView控件,然后设定Layout管理器

    RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rec);

    

    当然这里的setOrientation也可以设置为horizontal的,这样就是横向的

    MyAdaper就是适配器,他要继承的是RecyclerView.Adaper,主要重写里面的onCreatViewHolder(),onBindViewHolder(),getItemCount()这三个方法,

    onCreatViewHolder()就是创建ViewHolder

    onBindViewHolder()就是绑定ViewHolder,和数据绑定

    getItemCount()就是获取总的条目数

private class MyAdapter extends RecyclerView.Adapter {      @Override  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {      View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.item, null);      Holder holder = new Holder(view);      return holder;  }        @Override  public void onBindViewHolder( RecyclerView.ViewHolder holder, final int position) {      final Holder h = (Holder) holder;       h.setData(position);  }       @Override  public int getItemCount() {      return list.size();  }  }    class Holder extends RecyclerView.ViewHolder {      TextView mtv;        public Holder(View view) {          super(view);          mtv = (TextView) view.findViewById(R.id.tv);      }        public void setData(int position) {          mtv.setText(list.get(position).getName());      }  }

这样就可以了,但是有一点就是item没有条目点击事件,如果想要用的话,我们只能自己来写个接口了,因为我的适配器是写在Activity中的,也就是和OnCreat()在一个类中,所以如下:

    首先在全局中写个接口

public interface  onItemClickListener{      void onItemClick(View vi,int position);  }

    然后在适配器MyAdapter中

private onItemClickListener mOnItem;    public void onItemClickListener(onItemClickListener mOnItemClickListener){      this.mOnItem = mOnItemClickListener;  }

    然后在onBindViewHolder()方法

@Override  public void onBindViewHolder( RecyclerView.ViewHolder holder, final int position) {      final Holder h = (Holder) holder;       h.setData(position);        if(mOnItem != null){        h.mtv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                  mOnItem.onItemClick(h.mtv,position);            }        });      }  }

这就可以了,用的话在new 出适配器的时候设置点击事件

MyAdapter myAdapter = new MyAdapter();      myAdapter.onItemClickListener(new onItemClickListener() {          @Override          public void onItemClick(View vi, int position) {              Toast.makeText(Priactise.this, "这是" + position, Toast.LENGTH_SHORT).show();          }      });  mRecycle.setAdapter(myAdapter);