Android的新特性RecycleView

RecycleView
1.RecyclerView是什么?
RecylerView:是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥
有 item回收复用的功能,这一点从它的名字recylerview即回收view也可以看出。
2.RecyclerView的优点是什么?
根据官方的介绍RecylerView是ListView的升级版,既然如此那RecylerView必然有它的优点,现就
RecylerView相对于ListView的优点罗列如下:
①RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写
Adapter 面向的是ViewHolder而不再是View了,复用的 逻辑被封装了,写起来更加简单。
②提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecylerView专门抽取出
以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑
布流对应的还有StaggeredGridLayoutManager等),也就是说RecylerView不再拘泥于ListView的线
RecylerView的ItemDecoration这个类,然后针对自己的业务需求去抒写代码。
③可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,
RecylerView有其自己默认的实现。

3.使用步骤:
  3.1导入recyclerView-v7包
  3.2在布局文件中添加一个RecycleView
        <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
  3.3创建一个布局文件用来给每一个Item布局
  3.4声明数据并与布局文件中的控件进行绑定
     声明RecycleView对象
     private RecyclerView recyclerView;
    声明数据集合
    private List<Map<String, Object>> mList;
  3.5设置布局管理器格式
     线性布局管理器
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
  3.6 创建适配器   
      同ListView一样,RecyclerView只负责显示,而组建数据的任务,我们也需要一个Adapter来完成。 
     MyAdapter adapter = new MyAdapter();
     适配器与RecycleView进行绑定
    recyclerView.setAdapter(adapter);

           创建适配器 :**Adapter需要继承自RecyclerView.Adapter**
           在这里我们可以给Adapter一个泛型,这个泛型指定了该Adapter
           所使用的ViewHolder,如果不指定泛型,则默认是RecyclerView.ViewHolder,
           即自定义ViewHolder的父类
     class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHoler> {
      重写3个方法
         当需要拿到ViewHolder 的时候就会调用,返回值与之前的泛型相同,在加载不同类型的布局的时
         候,可以根据ViewType来创建不同的ViewHolder
         viewType是Item的数据类型
    public MyViewHoler onCreateViewHolder(ViewGroup parent, int viewType) {
    根据拿到的布局文件创建一个ViewHolder
        View view =       
        LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);

        MyViewHoler viewHoler = new MyViewHoler(view);
        return viewHoler;
    }

      当内容和布局进行绑定的时候回调这个方法,每当有新数据进入屏幕的时候,也会回调这个方法
      参数holder和ViewHolder类型与泛型所规定的类型相同,
      参数position代表的是该item的位置可以通过position来获取相应的数据
    public void onBindViewHolder(MyViewHoler holder, int position) {
        从数据列表中获取数据
        String text = mList.get(position).get("text").toString();
        int image = (Integer) mList.get(position).get("image");
        将数据设置到界面上
        holder.textView.setText(text);
        holder.imageView.setImageResource(image);
    }

    返回数据的个数
    public int getItemCount() {
        return mList.size();
    }
  3.7创建ViewHolder
      与ListView的ViewHolder不同,RecyclerView的ViewHolder需要
      继承自**RecyclerView.ViewHolder**
          class MyViewHoler extends RecyclerView.ViewHolder {
            TextView textView;
            ImageView imageView;
            public MyViewHoler(View itemView) {
                super(itemView);
                  进行控件关联
                textView = (TextView) itemView.findViewById(R.id.textView);
                imageView = (ImageView) itemView.findViewById(R.id.imageView);
            }
         }
   **表格(GridLayoutManager)**
   将线性布局管理器替换为表格布局管理器,就可以使用表格布局
    recyclerView.setLayoutManager(new GridLayoutManager(this,3));
   第一个参数:上下文
   第二个参数:列数

    GridLayoutManager(Context context, int spanCount, int orientation,
        boolean reverseLayout)
    第二个参数spanCount表示表格的行数或者列数;第三个参数表示是水平滑动或者是竖直方向滑动;
    最后一 个参数表示是否从数据的尾部开始显示。


   **瀑布流 (StaggeredGridLayoutManager)**
   将线性布局管理器替换为瀑布流布局管理器,就可以使用瀑布流布局       
   recyclerView.setLayoutManager(new    
   StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
   第一个参数是行(或列的数目) 
   第二个参数是滚动方向,如果为横向滚动,则每一个item的行高固定 
   如果为纵向滚动,则每一个item的列宽固定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值