广告
返回顶部
首页 > 资讯 > 移动开发 >Android RecyclerView 基础知识详解
  • 824
分享到

Android RecyclerView 基础知识详解

recyclerviewAndroid 2022-06-06 07:06:50 824人浏览 泡泡鱼
摘要

本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息。可能我们需要较长的时间来消化Android L引入的新东西。 这些天我一直在研究RecyclerView,并想

本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息。可能我们需要较长的时间来消化Android L引入的新东西。

这些天我一直在研究RecyclerView,并想在此给各位分享一下到目前为止我的成果。

RecyclerView是什么?

RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持。

开发RecyclerView时充分考虑了扩展性,因此用它可以创建想到的任何种类的的布局。但在使用上也稍微有些不便。这就是Android——要完成一件事情总不是那么容易。

如果使用RecyclerView,你需要了解以下三个元素:

RecyclerView.Adapter LayoutManager ItemAnimator

RecyclerView.Adapter

RecyclerView包含了一种新型适配器。它与现在使用的适配器类似,但也稍有不同,例如它需要使用ViewHolder。使用时需要重写两个主要方法:一个用来展现视图和它的持有者,而另一个用来把数据绑定到视图上。这么做的好处是,第一种方法只有当我们真正需要创建一个新视图时才被调用,不需要检查它是否已经被回收。


; html-script: false ]
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
  private List<ViewModel> items;
  private int itemLayout;
  public MyRecyclerAdapter(List<ViewModel> items, int itemLayout) {
    this.items = items;
    this.itemLayout = itemLayout;
  }
  @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
    return new ViewHolder(v);
  }
  @Override public void onBindViewHolder(ViewHolder holder, int position) {
    ViewModel item = items.get(position);
    holder.text.setText(item.getText());
    holder.image.setImageBitmap(null);
    Picasso.with(holder.image.getContext()).cancelRequest(holder.image);
    Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image);
    holder.itemView.setTag(item);
  }
  @Override public int getItemCount() {
    return items.size();
  }
  public static class ViewHolder extends RecyclerView.ViewHolder {
    public ImageView image;
    public TextView text;
    public ViewHolder(View itemView) {
      super(itemView);
      image = (ImageView) itemView.findViewById(R.id.image);
      text = (TextView) itemView.findViewById(R.id.text);
    }
  }
}

这是一个简单的适配器,但是事情逐渐开始变得有点复杂。在RecyclerView中,没有一个onItemClickListener方法(至少我没有发现)。所以适配器是一个处理事件的良好的候选人。

如果想要从适配器上添加或移除条目,需要明确通知适配器。这与先前的notifyDataSetChanged()方法稍微有些不同。


; html-script: false ]
public void add(ViewModel item, int position) {
  items.add(position, item);
  notifyItemInserted(position);
}
public void remove(ViewModel item) {
  int position = items.indexOf(item);
  items.remove(position);
  notifyItemRemoved(position);
}

LayoutManager

这个类决定视图被放在画面中哪个位置,但这只是它的众多职责之一。它可以管理滚动和循环利用。

LayoutManager只有一个叫做LinearLayoutManager的实现类,它有1500多行代码。但从这一点就可以看出它有多复杂。管理器可以模拟列表视图(包括横向和纵向),但没有页眉和页尾。

为LayoutManager编写子类不太适合新手,我们需要依靠社区来发掘RecyclerView的全部潜力。与这个例子一起,在短时间内我会上传一个GridView控件的实现。

我认为这背后的关键是要仿照LinearLayoutManager的代码创建一个BaseLayoutManager,并且基于此进行扩展。或许support-v7的最终版本会提供更多、更好的实现。

ItemAnimator

ItemAnimator会根据适配器上收到的通知动画显示视图组的修改。基本上,它会自动显示添加和移除条目动画。这也不是一个简单的类,但我们发现DefaultItemAnimator已经可以运行得很好了。

RecyclerView设置

所以最后,如果想要初始化一个运行的RecyclerView,你需要做这样的事情:


; html-script: false ]
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(new MyRecyclerAdapter(createMockList(), R.layout.item));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());

setHasFixedSize()方法用来使RecyclerView保持固定的大小,该信息被用于自身的优化

总结

RecyclerView确实是一个强大的视图,它为开发者提供了无限的扩展能力。学习曲线可能会非常陡峭。但我相信,不久Android社区就会发布LayoutManager超棒的实现。

我在创建一个GitHub仓库,在那里可以找到这个例子。它是我计划创建的一个扩展库的基础。你可以测试GridView的实现。欢迎各种形式的反馈。

以上就是对Android RecyclerView 的基础资料的详解,后续继续补充相关资料,谢谢大家对本站的支持!

您可能感兴趣的文章:Android应用开发中RecyclerView组件使用入门教程Android App开发中RecyclerView控件的基本使用教程深入解析Android中的RecyclerView组件Android RecyclerView布局就这么简单android给RecyclerView加上折叠的效果示例Android开发之RecyclerView控件Android RecyclerView基本使用详解Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)


--结束END--

本文标题: Android RecyclerView 基础知识详解

本文链接: https://www.lsjlt.com/news/23941.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android RecyclerView 基础知识详解
    本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息。可能我们需要较长的时间来消化Android L引入的新东西。 这些天我一直在研究RecyclerView,并想...
    99+
    2022-06-06
    recyclerview Android
  • Android基础知识之broadcast广播详解
    Android中的广播用的太多了,今天稍微总结一下。 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设...
    99+
    2022-06-06
    Android
  • ADO.NET基础知识详解
    ADO.NET是微软提供的一种数据库访问技术。 ADO.NET为不同类型的数据源提供了不同的数据提供程序对象: 数据提供程序说明SQL Server 数据提供程序提供对Microso...
    99+
    2022-11-13
  • 详解Zookeeper基础知识
    目录1. 简介2. 数据模型2.1 模型结构2.2 模型的特点2.3 节点分类2.3.1 Persistent2.3.2 Persistent Sequential2.3.3 Eph...
    99+
    2022-11-12
  • Javascript基础知识详解
    目录变量数据类型扩展点总结变量 基本语法 var age=10;//声明一个名称为age的变量,并且为它赋值,称为变量的初始化 var是一个JS关键字,用来声明...
    99+
    2022-11-12
  • linux基础知识-vmstat详解
    1. 前言 vmstat(VirtualMeomoryStatistics,虚拟内存统计)是一个不错的Linux/Unix监控工具,在性能测试中除了top外也是比较常用的工具之一,它可以监控操作系统的...
    99+
    2023-09-24
    linux 运维 服务器
  • linux基础知识-sar详解
    1.前言 sar(System Activity Reporter系统活动情况报告)是目前Linux比较全的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用...
    99+
    2023-08-19
    linux 服务器 运维
  • Android 基础知识4-3.2 EditText(输入框)详解
    一、EditText(输入框)介绍         EditText在开发中也是经常使用的控件,比如,要实现一个登录页面,需要用户输入账号、密码等信息,然后我们或得用户输入的内容,把它交给服务器来判断。因此,这一节我们需要学习如何在布局文件...
    99+
    2023-09-29
    android android studio 学习
  • Android 基础知识4-3.8 SeekBar(拖动条)详解
    一、简介          拖动条类似进度条,不同的是用户可以控制,比如,应用程序中用户可以对音效进行控制,这就可以使用拖动条来实现。由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.onSeekBarCha...
    99+
    2023-09-05
    android studio android 学习
  • Android 基础知识4-3.7 ProgressBar(进度条)详解
    一、简介         ProgressBar(进度条)是UI界面中一种非常实用的组件,通常用于向用户像是某个耗时操作完成的百分比。进度条可动态地显示进度,因此避免长时间地执行某个操作时,让用户感觉程序失去了响应,从而更好地提高用户界面的...
    99+
    2023-09-14
    android studio android 学习
  • PHP基础知识详细讲解
    目录一、简介二、php基本语法三、变量和作用域四、常量五、数据类型六、运算符七、流程控制八、超全局变量一、简介 基础知识: 需要一定的html和css的语法知识 基本概念: PHP(...
    99+
    2022-12-03
    PHP基础知识 PHP基础语法
  • 【MySQL】MySQL基础知识详解(一)
    MySQL select列的别名去除重复行空值参与运算着重号查询常数显示表结构过滤数据 排序使用 ORDER BY 对查询到的数据进行排序操作。使用列的别名,进行排序二级排序 分页LI...
    99+
    2023-09-04
    mysql 数据库 SQL
  • Android布局基础知识
    布局 布局的创建 UI(User Interface)界面是人与手机之间数据传递的、信息交互的重要媒介和对话窗口,是Android系统的重要组成...
    99+
    2022-06-06
    android布局 Android
  • Android 基础知识4-2.10 GridLayout(网格布局)详解
    一、GridLayout(网格布局)概述         GridLayout 布局是 Android 4.0 以后引入的新布局,和 TableLayout(表格布局) 有点类似,不过它功能更多,也更加好用,最大的特点是放置的组件自动占据网...
    99+
    2023-09-02
    android android studio 学习
  • Android的文件基础知识
    内部存储和外部存储 在Android4.4以前,内部存储(Internal Storage)就是指手机机身存储,而外部存储(External Storage)则指外置SD卡。 而在Android4....
    99+
    2023-09-07
    android java 开发语言
  • Android相机Camera基础知识
    一、概述 本章节主要讲述的Android相机Camera的相关知识点,主要包含三个方面,Android启动系统相机生成缩略图、Android启动系统相机生成原图以及Andro...
    99+
    2022-06-06
    Android
  • Python基础知识之变量的详解
    目录一.定义二.命名方法2.1小驼峰命名法2.2大驼峰命名法2.3下划线命名法三.命名规则3.1标识符3.2关键字四.使用方法4.1单变量赋值:4.2底层逻辑:4.3总结:5.变量进...
    99+
    2022-11-12
  • Android 基础知识之 VelocityTracker使用
    VelocityTracker是Android中用于追踪触摸事件速度的工具。它可以用于计算触摸事件的速度和加速度,从而用于实现一些手...
    99+
    2023-09-14
    Android
  • Android常用控件基础知识
    常用控件 控件是界面组成的主要元素 1.TextView 文本框(显示一些文本信息) 常用属性 android:text 设置显示文本 ...
    99+
    2022-06-06
    Android
  • Android RecyclerView基本使用详解
    什么是RecyclerView 关于RecyclerView,是一个主要用于展示和回收View的有一个控件,在官用了一句话来概括 RecyclerView 是一种通过提供有限的...
    99+
    2022-06-06
    recyclerview Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作