RecyclerView的使用

1,概述 
RecyclerView可以完全代替ListView、GridView,整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现很多让人惊艳的效果,而且实现效果也是非常的简单。(随便百度了一段话)

2,直接进入使用篇:

首先,创建好project

我们要想使用它,就要添加相应的依赖库。右击app

点那个加号,找到

3,代码部分很简洁,只放了一个简单的绑定数据,后续的在学习,现在只是搞清楚这个布局如何呈现出了,然后能够呈现一定的内容~

代码部分有注释,就不说什么了。

package examples.ouc.com.learnrv;

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

public class MainActivity extends AppCompatActivity {

    //用来代替ListView
    private RecyclerView rv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        rv= new RecyclerView(this);
        setContentView(rv);

        rv.setLayoutManager( new LinearLayoutManager(this));

        rv.setAdapter(new RecyclerView.Adapter() {

            class ViewHolder extends RecyclerView.ViewHolder{

                private TextView tv;
                public ViewHolder(TextView itemView) {
                    super(itemView);
                    tv = itemView;
                }

                public TextView getTv() {
                    return tv;
                }
            }
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return new ViewHolder(new TextView(parent.getContext()));
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
                ViewHolder vh = (ViewHolder) holder;
                vh.getTv().setText("item "+position);
            }

            //huoqu ziduixiang shuliang
            @Override
            public int getItemCount() {
                return 10;
            }
        });
    }
}

MainActivity

4,上述书通过直接代码创建布局,然后载入,但是大部分时间,还是通过xml布局文件控制比较方便

我们首先将上面的代码进行一下重构,将adapter冲构成一个类,使代码更简洁~

这里面有很多注释之类的,是跟着极客学院学习时候留下的,不过没有影响,这只会影响我们的布局情况,并不会影响实现功能!

 1 package examples.ouc.com.learnrecylerview;
 2
 3
 4 import android.os.Bundle;
 5 import android.support.v7.app.AppCompatActivity;
 6 import android.support.v7.widget.GridLayoutManager;
 7 import android.support.v7.widget.LinearLayoutManager;
 8 import android.support.v7.widget.RecyclerView;
 9
10 public class MainActivity extends AppCompatActivity {
11
12     private RecyclerView rv;
13
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17
18         rv = new RecyclerView(this);
19         setContentView(rv);
20
21         //设置布局
22         //第一个参数获取布局,第二个参数表示数值还是水平,第三个是否反转
23 //        rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false));
24
25         //第一个参数获取布局,第二个表示有几列(默认是垂直方向)
26         rv.setLayoutManager(new GridLayoutManager(this,3));
27
28         //rv.setLayoutManager(new GridLayoutManager(this,3,LinearLayoutManager.HORIZONTAL,false));
29         //添加内容
30         rv.setAdapter(new MyAdapter());
31     }
32
33 }

MainActivity

然后是MyAdapter

 1 package examples.ouc.com.learnrecylerview;
 2
 3 import android.support.v7.widget.RecyclerView;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.TextView;
 8
 9 import org.w3c.dom.Text;
10
11 /**
12  * Created by Huskyboy on 2016/11/19.
13  */
14 class MyAdapter extends RecyclerView.Adapter {
15
16     class ViewHolder extends RecyclerView.ViewHolder {
17         //绑定子对象的视图
18         private View root;
19         private TextView tvTitle,tvContent;
20
21         public ViewHolder(View root) {
22             super(root);
23             tvTitle = (TextView) root.findViewById(R.id.tvTitle);
24             tvContent = (TextView) root.findViewById(R.id.tvContent);
25         }
26
27         public TextView getTvContent() {
28             return tvContent;
29         }
30
31         public TextView getTvTitle() {
32             return tvTitle;
33         }
34     }
35
36     //创建holder
37     @Override
38     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
39         //布局解析器
40         return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));
41     }
42
43     //对holder的textView进行操作
44     @Override
45     //第一个参数是我们绑定的holder
46     //第二个是一个索引,我们的当前初始化的数据是哪一条
47     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
48
49         //注意这里引入的ViewHolder类是我们上面创建的类,不要加错包
50         ViewHolder vh = (ViewHolder) holder;
51
52         CellData cd = data[position];
53         vh.getTvTitle().setText(cd.title);
54         vh.getTvContent().setText(cd.content);
55
56     }
57
58     //获取RecylerView子对象数量
59     @Override
60     public int getItemCount() {
61         return data.length;
62     }
63
64     private CellData[] data =  new CellData[]{new CellData("iCyhuSky"," 1995-06-19"),
65         new CellData("news ", "Nice")};
66 }

MyAdapter.java

CellData.java

 1 package examples.ouc.com.learnrecylerview;
 2
 3 /**
 4  * Created by Huskyboy on 2016/11/19.
 5  */
 6
 7 public class CellData {
 8     public CellData(String title, String content){
 9         this.content = content;
10         this.title = title;
11     }
12
13     public String title = "title";
14     public String content = "content";
15 }

CellData.java

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:text="tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvTitle" />

    <TextView
        android:text="tvComtent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvContent" />
</LinearLayout>

list_cell.xml

5,这里注意一点是,在重写MyAdapter的时候,

 public int getItemCount() {
        return data.length;
    }

这个返回的数量一定要与Data数组相对应,否则会报错,无法加载布局!

时间: 2024-12-11 07:55:04

RecyclerView的使用的相关文章

Android零基础入门第64节:揭开RecyclerView庐山真面目

大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerView的使用. 一.RecyclerView概述 从前面的学习我们知道,ListView的功能非常强大,几乎绝大部分应用程序都会使用到,虽然也学会一些方法技巧来提升ListView的效率,但其性能还是不是很完美. 另外ListView的可扩展性相对来说比较弱,以前要实现每个列表项的高度不同的界面,或者

RecyclerView动态添加、删除及点击事件

上一节讲解了RecyclerView的三种显示方式,本节将主要研究一下RecyclerView的动态添加.删除及其单击和长按事件的处理.我们在上一节代码的基础上进行相关操作. 一.修改适配器类MyAdapter,加入添加和删除这两个方法: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private List<String>

安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路

针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest.qq.com/cube立即体验! 作者:Hoolly,腾讯移动客户端开发工程师. 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处 WeTest导读 安卓开发者都知道,RecyclerView比ListView要灵活的多,但不可否认的里面的坑也同样埋了不少人.下面让我们看看腾讯开发工程

RecyclerVIew 下拉刷新上拉加载

步骤: 寻找RecyclerView 上拉刷新下拉加载开源库 加入到项目中 解决整合进来的bug 待续...

【Android】RecyclerView详解(一)

1.介绍 RecyclerView是比 ListView 更高级且更具灵活性的组件. 此组件是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效的滚动操作. 如果您有数据集合,其中的元素将因用户操作或网络事件而发生改变,请使用 RecyclerView 小组件. RecyclerView使用起来很方便因为它: 提供了一种插拔式的体验,高度的解耦,异常的灵活使用; 显示的样式更丰富包括水平,竖直,Grid,瀑布显示方式; 可以通过ItemDecoration自定义Item间的间隔;

【FastDev4Android框架开发】实例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50087873 本文出自:[江清清的博客] (一).前言: 作为Android L开始,Google更新了新控件RecyclerView和CardView,这两个控件在之前的文章中已经做了详细介绍和使用,同时在前面还对下拉刷新组件SwipeRefreshLayout进行相关讲解.本来该专题不在更新了,正好昨天有一个群友问到了怎么样结合SwipeRefreshLayou

Android RecyclerView设置item间距

RecyclerView没有可以直接设置间距的属性,但可以用ItemDecoration来装饰一个item,所以继承重写ItemDecoration就可以实现间距了 public class SpaceItemDecoration extends RecyclerView.ItemDecoration{ private int space; public SpaceItemDecoration(int space) { this.space = space; } @Override public

《android recyclerview的简单使用》

首先是主要布局 <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipeRefreshLayout" android:layout_width="match_parent" android:layout_height="match_pa

明日之星——RecyclerView(一)

在Listview中使用了很久的viewholder.setTag.getTag来实现Item复用后, Google大大终于看不下去了.推出了明日之星RecyclerView,现已加入support.v7豪华套餐.顾名思义,RecyclerView本身是不管怎么布局的.它本身只负责,加载看得见的viewHolder,释放看不见的viewHolder.这一功能就代替掉了,ListView中麻烦的Item复用设计.而对于布局的控制,RecyclerView则依赖于LayoutManager.下面,我

RecyclerView使用

RecyclerView是android5.0提供的新组件(最新的support.v7中也提供了该组件),类似于ListView,但是比ListView更灵活.更先进,我觉得主要表现在以下几个方面: 1.  把ViewHolder的实现封装起来,规范了ViewHolder,把item的view写入ViewHolder中,通过复用ViewHolder来实现view的复用. 2.  RecyclerView.Adapter中把view的回收和内容改变等操作分开解耦了,比传统的Adapter更为灵活.