Android RecyclerView 梦幻般的控件 使用解析(一)

前言

刚刚公司开了一个“SQLServer性能调优,实操经验分享“的简短的培训会议,对于我来说真的是差点睡着了,主要是昨天太迟睡了吧,嗨,说好的合理安排作息时间。。。好了,废话不多说,正好提提神,我们一起来看看RecyclerView的使用吧,这个空间使用价值还是非常大的,我觉得应该较好的掌握。RecyclerView的一出现就引起了大量的关注,他梦幻般的效果让ListView和GridView等感到了深深的危机感。


简介

先简单说一下RecyclerView是什么吧,他是在support-v7包中提供的一个控件,根据官方的介绍呢,大致就是说可以在一个有限的布局中显示大量的数据,就类似于ListView和GridView吧。那么问题来了,为啥明明有了类似的控件又要重新来一个RecyclerView呢,第三方的PullToRefresn框架也是用起来极好的。

其实整体上看RecyclerView,是提供了一种插拔式的体验,它提供设置不同的LayoutManager,ItemDecoration , ItemAnimator能组合出非常惊人的效果,应该说实现了高度解耦。


使用方法

首先我们需要了解,和ListView比较,使用可能变得更加复杂一点,对于ListView的使用我就不多说了,就设置一个Adapter就可以搞定,那么RecyclerView的使用需要以下几步:

  1. 得到RecyclerView对象
  2. 设置布局管理器
    setLayoutManager(layout);
  3. 设置Adapter
    setAdapter(adapter);
  4. 设置item的动画效果(这个效果不错哦,可选)
    setItemAnimator(new DefaultItemAnimator())
  5. 设置分隔线(坑爹了,竟然要自己设置分隔线,可选)
    addItemDecoration(RecyclerView.ItemDecoration decor);

实战

接下来我们就来看看最简单的RecyclerView的使用方法吧。
具体说明我都写在注释里面了

首先是Activity:

package com.mic.blin.myrecyclerview;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends Activity {
    private ArrayList<String> data;
    private RecyclerView recyhclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        //找到RecycleView对象
        recyhclerView = (RecyclerView) findViewById(R.id.recycleView);
        //设置布局管理器
        recyhclerView.setLayoutManager(new LinearLayoutManager(this));
        //设置Adapter
        recyhclerView.setAdapter(new MyRecyclerAdapter());
    }
    /**
    *初始化数据源
    **/
    private void initData(){
        data = new ArrayList<String>();
        for(int i = 0;i<100;i++){
            data.add("blin item :"+i);
        }
    }
    /**
    *和ListView一样,需要一个Adapter继承RecyclerView.Adapter
    *需要说明的几点是:
    *1.ListView中我们重用ViewHolder是后面定义一个内部类实现的,这里需要一开始传入
    *即:RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder>,当然也是内部类。
    *2.这样做的好处就是官方已经帮我们解决了重用的问题,我们只需提供重用的这个东西,系统会自己去调用。
    *3.当然这个时候你的ViewHolder就不能随便自己乱来了,需继承官方提供的RecyclerView.ViewHolder
    *4.这边需要实现3个重写方法:
    *  4.1 onCreateViewHolder(ViewGroup parent, int viewType)就是返回一下重用的布局而已
    *  4.2 onBindViewHolder(MyViewHolder holder, int position)这边就是用来绑定数据的
    *  4.3 getItemCount() 这个没什么好说的
    **/
    class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder>{
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            MyViewHolder viewHolder =
            new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(
            R.layout.content_main,parent,false));
            return viewHolder;
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.tv.setText(data.get(position));
        }

        @Override
        public int getItemCount() {
            return data.size();
        }
        /**
        *印证上面所说的,这边定义的内部类MyViewHolder需要继承RecyclerView.ViewHolder,
        *这样才能为系统所重用。
        **/
        class MyViewHolder extends RecyclerView.ViewHolder{
            public TextView tv;
            public MyViewHolder(View itemView) {
                super(itemView);
                /**
                *初始化item里面的控件
                */
                tv = (TextView) itemView.findViewById(R.id.textView);
            }
        }
    }
}  

然后是布局文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycleView"
        android:layout_height="match_parent"
        android:layout_width="match_parent">

    </android.support.v7.widget.RecyclerView>
</RelativeLayout>

最后是item布局:content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/textView"
        android:gravity="center"
        android:textSize="20sp"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

就这么简单,最简单的使用就是这样,然后跑起来看一下:

RecyclerView最简单的使用


总结

跑起来后是不是发现很坑爹,竟然没有分隔线。。。其实吧,我建议的官方最好能够提供几个简单的,当然既然能自己加,那就充分证实了其功能的强大。
总结几点使用的方法:

  1. 使用方法其实很简单,就比ListView多了2步,当然多的步骤就是灵活性的体现,会在后期说明。
  2. 在继承RecyclerView.Adapter的时候需要注意要直接提供一个MyRecyclerAdapter.MyViewHolder,所以你得先在里面写一个内部类继承RecyclerView.ViewHolder。
  3. 做第2步的好处就是直接重用了item布局,相比ListView要求更高了。
  4. 4.

今天也就这么点时间,就简单的和大家介绍一下RecyclerView的最基本的用法,当然RecyclerView的功能远远的不仅于此,其他我会在接下来的博客中更新,未完待续。。。


PS

又是周五了,你们懂得^_^
博文中的代码会在RecyclerView控件更新完后给出总的代码下载链接Android RecyclerView 梦幻般的控件 使用解析(三)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值