各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在前面章回中介绍了ListView组件,今天我们将介绍ListView组件的升级版:RecyclerView组件。之所以叫它升级版本是因为它是官方推出的组件,而且官方推荐使用它来替代ListView组件。它虽然和ListView一样是用来在有限的屏幕空间内滚动显示大量数据,但是它比ListView的显示效率高,因为它每次只创建一个屏幕可以显示的列表,当滑动屏幕时,它自动销毁从屏幕中消失的列表,然后再创建新的列表显示到屏幕中,这样循环往复。细看一下这操作就和它的名字一样,如果和数据结构对比的话,就有点循环队列的意思。接下来我们通过文本结合代码的方式来介绍如何使用RecyclerView组件。

  • 1.在布局文件中添加RecyclerView组件。通常是在Activity或者Fragment的布局文件中添加。添加时需要使用完整包名,因为它是support库中的东西。代码如下:
    <android.support.v7.widget.RecyclerViewandroid:id="@+id/id_recycler_view"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

  • 2.在代码中加载RecyclerView组件的布局。通常是在Activity的onCreate方法或者Fragment的onCreateView方法中加载它的布局,这和普通组件的加载方法相同:
    //获取RecyclerView控件,该控件定义于上面的布局中mRecyclerView = (RecyclerView)view.findViewById(R.id.recyclerview);    

  • 3.设置LayouManager。使用该组件的setLayoutManager方法。代码如下:
     mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

  • 4.创建适配器(Adapter)对象,并且为RecyclerView设置Adapter。具体的代码如下:
    //把Recylerview和adapter关联起来,CustomAdapter稍后介绍mRecyclerView.setAdapter(new CustomAdapter(mData));    

简单起见,在这里的把mData定义成一个数组,在实际中可以依据项目需求来定义。但是不管如何定义,它都要和适配器的构造函数保持一致,不然没有办法把数据传递给适配器。此外,这也是可以进行扩展的地方,我们将在后面章回中介绍,下面是与mData相关的代码:

    private String[] mData = new String[50];for(int i=0; i<50;++i){mData[i]= "This is item "+(i+1);}

接下来该适配器出场了,代码中的CustomeAdapter类是RecyclerView.Adapter的子类,也就是说RecyclerView已经把适配器的规范定义好了,我们只需要按照规范去实现就可以,那么有哪些规范呢?规范主要是实现一个ViewHolder(这个不陌生吧),并且重写onCreateViewHolder()方法,onBindViewHolder()方法和getItemCount。

  1. onCreateViewHolder方法主要是加载布局文件和创建ViewHolder;这里的布局文件指Recycler包含的布局,也就是显示到屏幕中的布局。
  2. onBindViewHolder方法主要是为RecyclerView包含的布局中各个控件添加数据,进而实现数据和视图的连接操作(也可以理解为更新数据)。
  3. getItemCount方法主要是获取RecyclerView中条目的数量,这个数量是指所有数据的数量,而不是在屏幕上显示数据的数量。

下面是代码,不过首先要创建一个布局文件,用来显示RecyclerView中每行或者每列显示的内容,至于布局中显示哪些的内容可以依据项目需求来定。

<?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="wrap_content"><TextViewandroid:id="@+id/id_recy_view_item_text"android:layout_width="wrap_content"android:layout_height="18dp"/>
</LinearLayout>

我们创建了一个叫recycler_view_layout的布局文件,简单起见,我们只放了一个文本组件,用来显示一行文本内容。布局创建好以后,接下就是重头戏:创建适配器。

//注意适配器是泛型
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomViewHolder>{ //自己定义的数据容器,这里使用简单的字符串数组,
//可以是list或者其它容器,容器中的数据类型可以自己定义private String[] mStrings; //定义ViewHolder,继续自RecyclerView的ViewHolderpublic static class CustomViewHolder extends RecyclerView.ViewHolder{//RecyclerView中每一个子项包含的组件,也就是RecyclerView每行或者每列显示的内容public TextView tv; //ViewHolder就是一个数据容器public CustomViewHolder(View v){super(v);//获取RecyclerView中的组件tv =(TextView) v.findViewById(R.id.id_recy_view_item_text);}public TextView getTextView(){return tv;}}//重写适配器的构造器,目的是把数据传入到适配器中public CustomAdapter(String[] strings){if(strings != null) {mStrings = strings;}}@Overridepublic CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//获取View对象,这里的布局就是刚才创建的,看布局id就能明白。//它用来显示Recylerview中具体的列表项View view = LayoutInflater.from(parent.getContext()).inflate (R.layout.recycler_view_layout,parent,false);//创建viewHoldCustomViewHolder customViewHolder = new CustomViewHolder(view); //返回ViewHolderreturn customViewHolder;  }@Overridepublic void onBindViewHolder(CustomViewHolder holder, int position) {//通过position参数获取列表项在Recylerview中的位置,然后更新该位置的数据holder.getTextView().setText(mStrings[position]); }@Overridepublic int getItemCount() {//这个长度比较重要,如果为0,那么recylerview中不会有任何数据显示。return mStrings.length;}
}

上面的代码,完全是按照RecyclerView.Adapter的规范来写的,这和ListView不一样,我们可以自己扩展。另外,我们还创建了一个布局文件,用来显示RecyclerView中每一项的内容,该布局不像ListView一样可以使用系统提供的,因为系统没有提供,只能自己定义。

此外,RecyclerView组件是support库中的东西,它不在SDK中,使用该组件时需要添加支持库,可以手动修改app目录下的build.gradle文件,在dependencies中添加:

compile 'com.android.support:recyclerview-v7:25.1.0'

或者修改项目配置,AST会自动修改gradle文件。修改步骤: AST Menu->File->ProjectStructure->app.

不过添加的Recyclerview组件要和support库的版本一致,不然会出现不兼容的问题。我使用的版本如下:

    compile 'com.android.support:appcompat-v7:25.1.0'compile 'com.android.support:recyclerview-v7:25.1.0'

下面是程序运行的结果,请参考:

各位看官,关于Android中UI控件之RecyclerView基础的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础相关推荐

  1. android listview 滑动条显示_ListView详细介绍与使用

    前言介绍: 关于 ListView 我们大家都应该是非常的熟悉了,在 Android 开发中是经常用到的,今天就再来回顾一下,ListView 的使用方法,和一些需要优化注意的地方,还有日常开发过程中 ...

  2. android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  3. android 触摸监听重写_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  4. 七十六、React中的TodoList和拆分组件,组件之间的传值

    2020/11/18. 周三.今天又是奋斗的一天. @Author:Runsen 这东西已经有很多大佬们写过了,就不多班门弄斧了.主要使用这个例子入门 React ,包括 state.props.组件 ...

  5. 当前安全设置禁止运行该页中activeX控件,该页无法正常显示

    运行services查看服务时,当前安全设置禁止运行该页中activeX控件,该页无法正常显示:打开一个project文件时,也显示 当前安全设置禁止运行该页中activeX控件,该页无法正常显示. ...

  6. android gridview滑动监听,Android GridView 滑动条设置一直显示状态(推荐)

    Android GridView 滑动条设置一直显示状态(推荐) 模拟GridView控件: android:id="@+id/picture_grid" android:layo ...

  7. 转: Android ListView 滑动背景为黑色的解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的 ...

  8. Android ListView 滑动背景为黑色的解决办法 listview小知识整理

    为什么80%的码农都做不了架构师?>>>    在别的地方看到的,转过来作为记录!! 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一 ...

  9. android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

    什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...

最新文章

  1. 不可不知的sudo命令
  2. filter过滤器_不了解布隆过滤器?一文给你整的明明白白!
  3. Kotlin 文档 .Google 正式确定将 Kotlin为android 开发语言
  4. struts2配置文件(简单)
  5. 分子克隆基础:什么是质粒
  6. 前沿分享|阿里云数据库资深技术专家 姚奕玮:AnalyticDB MySQL离在线一体化技术揭秘
  7. log4j:WARN Please initialize the log4j system properly
  8. 实现了发动机功能,支持Slider Motor、Hinge Motor、Hinge2 Motor。
  9. linux学习之路(1)
  10. Blazor验证控件
  11. 飞客蠕虫(Conficker)
  12. rrt matlab算法,rrt算法matlab代码
  13. qt程序在win10正常运行win7电脑上崩溃
  14. echarts常见图形-时间轴(五)
  15. 一键adb连接网易Mumu模拟器
  16. Java 应用程序,该程序中有 3 个类:Triangle、T rapezium 和 Circle,分别用来 表示三角形、梯形和圆形。
  17. tp无线路由器设置打印服务器,TP-Link TL-WDR4320 无线路由器打印服务器设置指南
  18. 真实经历,互联网大厂升职加薪那些事
  19. [转载]Buffon投针实验:究竟为什么是pi?
  20. shell 批量 ping 多个IP地址

热门文章

  1. Eclipse 插件用法:Eclipse 利用 Amateras UML 生成 Java 类图、时序图和 UML 类图
  2. win10证书服务器不可用,win10系统提示“安全证书的吊销信息不可用”的修复方法...
  3. C语言编程出图形,C语言画出各种图形
  4. Python 装饰器详解(上)
  5. php访问js文件不存在,php文件里js不能被执行
  6. stm32外部中断_STM32学习笔记 | 电源管理及低功耗设计要点
  7. mqtt 发送消息过多_阿里云MQTT服务端注解式消息处理分发与同步调用实践小结
  8. 华为笔记本会不会用鸿蒙,华为MateBook Pro笔记本为什么不用鸿蒙操作系统HarmonyO?...
  9. seata 如何开启tcc事物_微服务分布式事务4种解决方案实战
  10. oracle的sga