RecyclerView是Android support v7里面是一个自定义控件。用来显示大量数据集合。类似ListView和GridView这两个控件,RecyclerView同样可以实现,甚至更好。

以前我们在实现ListView和GridView的时候,都会定义一个ViewHolder用于优化UI性能【详见】,RecycleView的实现,已经是自带ViewHolder的实现。请看示例。

  1. 实现Adapter,定义每个Item的布局UI和数据。
    1. public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
    2.  
    3.     private List<String> mDatas = new ArrayList<>(0);
    4.  
    5.     public MyRecyclerAdapter(List<String> datas) {
    6.         if (datas != null) {
    7.             mDatas.addAll(datas);
    8.         }
    9.     }
    10.  
    11.     public static final class ViewHolder extends RecyclerView.ViewHolder {
    12.  
    13.         private final TextView textView;
    14.         private final Button button;
    15.  
    16.  
    17.         public ViewHolder(View itemView) {
    18.             super(itemView);
    19.             textView = (TextView) itemView.findViewById(R.id.item_text);
    20.             button = (Button) itemView.findViewById(R.id.item_button);
    21.             button.setOnClickListener(new View.OnClickListener() {
    22.  
    23.                 @Override
    24.                 public void onClick(View v) {
    25.                     Toast.makeText(v.getContext(), String.valueOf(getPosition()), Toast.LENGTH_SHORT).show();
    26.                 }
    27.             });
    28.         }
    29.  
    30.         public TextView getTextView() {
    31.             return textView;
    32.         }
    33.  
    34.         public Button getButton() {
    35.             return button;
    36.         }
    37.     }
    38.  
    39.     @Override
    40.     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    41.         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
    42.         return new ViewHolder(view);
    43.     }
    44.  
    45.     @Override
    46.     public void onBindViewHolder(ViewHolder holder, int position) {
    47.         holder.getButton().setText(String.valueOf(position));
    48.         holder.getTextView().setText(mDatas.get(position));
    49.     }
    50.  
    51.     @Override
    52.     public int getItemCount() {
    53.         return mDatas.size();
    54.     }
    55.  
    56. }
  2. 初始化RecyclerView

    设置Adapter和LayoutManager。LayoutManager定义了每个Item的排列形式。官方提供两种实现,LinearLayoutManager和GridLayoutManager,当然我们也可以根据需求,自己实现LayoutManager。

    1. recyclerView = (RecyclerView) findViewById(R.id.recycler);
    2. MyRecyclerAdapter adapter = new MyRecyclerAdapter(Datas.getDatas(1000));
    3. RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
    4. recyclerView.setLayoutManager(layoutManager);
    5. recyclerView.setAdapter(adapter);

RecyclerView就是这么简单。

源码:GitHub

RecyclerView 介绍 01的更多相关文章

  1. vue项目搭建介绍01

    目录 vue项目搭建介绍01 vue 项目框架环境搭建: 创建项目: vue 项目创建流程: vue项目搭建介绍01 vue 项目框架环境搭建: vue 项目框架: vue django(类似)(vu ...

  2. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  3. Android新组件RecyclerView介绍,其效率更好

    今天我们首先来说为什么要介绍这个新组件RecyclerView,因为前几天我发布了一个常用面试题ListView的复用及如何优化的文章,介绍给一些开发者,但是我看到有关的反馈说:现在都不再用listv ...

  4. RecyclerView 介绍 02 – 重要概念

    几个概念 RecyclerView是一个ViewGroup: LayoutManager控制RecyclerView的ChildView的布局显示,childview由Recycler提供以及管理: ...

  5. ZOJ 2676 Network Wars ★(最小割算法介绍 && 01分数规划)

    [题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等 ...

  6. SaltStack 安装介绍 01

    一.入门指南 1.1 SALTSTACK是什么? The backbone of Salt is the remote execution engine, which creates a high-s ...

  7. AQS(AbstractQueuedSynchronizer)介绍-01

    1.概述 AQS( AbstractQueuedSynchronizer ) 是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来.如: ReentrantLock 和 ...

  8. WPF通用框架ZFS《项目结构介绍01》_模块介绍

    首页介绍: 下图为项目运行首页图片, 大的结构分为三块: 1.Header首部模块(存放通知组件[全局通知.消息管理 ].扩展模块[皮肤.系统设置.关于作者.退出系统]) 2.Left左侧菜单模块(存 ...

  9. 版本控制工具Git介绍-01

    使用版本控制工具是为了方便团队开发,比如多人共同维护一个项目的时候,用版本控制工具可以很方便的维护项目代码,如果哪天你改了一个版本,出问题了,我们也可以很快的找到你改了什么,这里介绍使用比较多的版本控 ...

随机推荐

  1. 打包文件 MANIFEST.MF 功能详解

    最近研究了如何在java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件 Manifest-Version: 1.0 Main-Class: windows.VideoWindow ...

  2. 【leetcode】Flatten Binary Tree to Linked List (middle)

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  3. ajax加载模块实时刷新的原理

    var loadMenu = function(data) {        var trs = template.render('menu-list-temp', {'list': data});  ...

  4. 让div等块级元素水平以及垂直居中的解决办法

    一.背景 我们在设计页面的时候,经常要把div等块级元素居中显示,而且是相对页面窗口水平和垂直方向居中显示,如让登录窗口居中显示.我们传统解决的办法是用纯CSS来让div等块级元素居中.在本文中,我将 ...

  5. C#更新SQLServer中的TimeStamp字段(时间戳) 防止同时修改一行时覆盖更新

    C#更新SQLServer中的TimeStamp字段(时间戳) 分类: C#2012-10-24 15:10 1878人阅读 评论(0) 收藏 举报 public partial class Form ...

  6. [Android] Android5.1系统自带的应用启动次数统计

    reference to : http://blog.csdn.net/elder_sword/article/details/50508257 前段时间要做一个统计手机中激活量的东东,这个统计不是单 ...

  7. Xn数列(codevs 1281)

    题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...

  8. Swift - 让程序挂起后,能在后台继续运行任务

    1,程序的挂起和退出 由于iOS设备资源有限.当用户点击了home键,或者另一个应用程序启动了.那么原先那个程序便进入后台被挂起,不是退出,只是停止执行代码,同时它的内存被锁定.当应用程序恢复时,它会 ...

  9. bluetooth service uuid

    转自:https://www.bluetooth.com/specifications/assigned-numbers/service-discovery service discovery ​​​ ...

  10. 在Eclipse中自定义类似syso的快捷代码模板

    sysout/syso syserr/ syse 点击菜单栏的“Window”->“Preferences”,打开“Preferences”对话框.在Preferences”对话框中点击“Jav ...