为了让RecyclerView可以在所有的Android版本中都能使用,Android开发团队将RecyclerView定义在support.v7包当中。在使用该控件时需要打开当前Modile的build.gradle文件,然后在dependencies节点中添加依赖库的代码。具体代码如下:

compile 'com.android.support:recyclerview-v7:插入版本号'

添加完成以后需要单击右上角的Sync Now进行同步。同步完成后可以在布局文件中添加RecyclerView控件,语法格式如下:

<android.support.v7.widget.RecyclerViewandroid:id="@+id/my_recycler_view"android:scrollbars="vertical"android:layout_width="match_parent"android:layout_height="match_parent"/>

控制RecyclerView需要一些常用的方法,具体方法如下:

◆ setLayoutManager:设置列表项的布局管理器,LinearLayoutManager为线性布局管理器、GridLayoutManager为网格布局管理器、StaggeredGridLayoutManager为瀑布流网格布局管理器。

◆ setItemAnimator:设置列表项增加或者是删除时的动画,可以使用关键字new创建 DefaultItemAnimator()对象实现系统默认的动画效果。

◆ addItemDecoration:添加列表项分割线。

◆ addOnItemTouchListener:添加列表项的触摸监听器。

◆ removeOnItemTouchListener:移除列表项的触摸监听器。

◆ setAdapter:设置列表项的适配器,使用RecyclerView.Adapter。

RecyclerView.Adapter是为RecyclerView所单独设计的适配器类,RecyclerView.Adapter的相关方法如下:

◆ getItemCount:获取列表项的数目。

◆ onBindViewHolder:绑定列表项中所显示的数据。

◆ onCreateViewHolder:在该方法中可以加载列表item(子项)中的布局文件。

下面通过一个具体的实例演示RecyclerView垂直列表的具体应用。

实例 模拟QQ消息列表

在Android Studio中创建Module,名称为“QQMessageList”,具体步骤如下:

(1)打开build.gradle(Module: QQMessageList)文件,然后在该文件中的dependencies节点中添加依赖库的代码。

(2)修改新建Module的res/layout目录下的布局文件activity_main.xml,将默认添加的布局管理器修改为相对布局管理器并将TextView组件删除,然后添加1个RecyclerView组件用于显示消息列表。具体代码如下:

01   <?xml version="1.0" encoding="utf-8"?>02   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"03       xmlns:app="http://schemas.android.com/apk/res-auto"04       xmlns:tools="http://schemas.android.com/tools"05       android:layout_width="match_parent"06       android:layout_height="match_parent"07       tools:context="com.mingrisoft.MainActivity">08       <!--列表控件-->09       <android.support.v7.widget.RecyclerView10           android:id="@+id/recyclerview"11           android:background="#EEEEEE"12           android:layout_width="match_parent"13           android:layout_height="wrap_content"14           android:orientation="vertical"15           />16   </RelativeLayout>

(3)在res/layout目录中创建1个名称为layout_item.xml的布局文件,将默认添加的布局管理器修改为相对布局管理器,首先添加1个ImageView组件用于显示头像的图标,然后添加1个垂直线性布局管理器,在该布局管理器中添加2个TextView组件分别用于显示名称与文字消息。具体代码如下:

01   <?xml version="1.0" encoding="utf-8"?>02   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"03       android:layout_width="match_parent"04       android:layout_height="50dp"05       android:layout_marginBottom="1dp"06       android:background="@android:color/white"07       android:gravity="center_vertical">08       <!--图标-->09       <ImageView10           android:id="@+id/img"11           android:layout_width="50dp"12           android:layout_height="50dp"13           android:layout_alignParentLeft="true"14           android:layout_alignParentStart="true"15           android:layout_alignParentTop="true" />16       <LinearLayout17           android:layout_width="wrap_content"18           android:layout_height="match_parent"19           android:layout_toRightOf="@+id/img"20           android:gravity="center_vertical"21           android:orientation="vertical">22           <!--名称-->23           <TextView24               android:id="@+id/name"25               android:layout_width="match_parent"26               android:layout_height="wrap_content"27               android:layout_marginLeft="20dp"28               android:textColor="#000000"29               android:textSize="15dp" />30           <!--消息-->31           <TextView32               android:id="@+id/info"33               android:layout_width="match_parent"34               android:layout_height="wrap_content"35               android:layout_marginLeft="20dp"36               android:layout_marginRight="15dp"37               android:singleLine="true"38               android:textSize="10dp" />39       </LinearLayout>40   </RelativeLayout>

(4)在res/values目录中的strings.xml字符串资源文件内添加名字与文字消息,用于显示在列表当中。

(5)在com.mingrisoft包中创建1个名称为Adapter的Java类,首先在该类中创建1个名称为MyViewHolder的内部类并让该类继承自RecyclerView.ViewHolder,在该内部类中获取列表中用于显示名称、头像图标与文字信息的组件。然后让Adapter类继承自RecyclerView.Adapter<Adapter.MyViewHolder>并且实现相对应的方法。具体代码如下:

01   public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {02       @Override03       public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {04           return null;05       }06       @Override07       public void onBindViewHolder(MyViewHolder holder, int position) {08       }09       @Override10       public int getItemCount() {11           return 0;12       }13       class MyViewHolder extends RecyclerView.ViewHolder {14           public TextView name, info;              //编号文字15           public ImageView img;                     //图标16    17           //获取相关控件18           public MyViewHolder(View itemView) {19               super(itemView);20               name = (TextView) itemView.findViewById(R.id.name);21               info = (TextView) itemView.findViewById(R.id.info);22               img = (ImageView) itemView.findViewById(R.id.img);23           }24       }25   }

(6)创建3个int类型的数组分别用于保存头像的图标资源、名字、文字信息,然后创建3个ArrayList集合分别用于保存数组中的资源文件,最后创建1个Adapter构造方法,在该方法中设置菜单行数与行内图标、名称与文字信息具体代码如下:

01   //图标数组02   private int[] icons = {03           R.mipmap.icon_1, R.mipmap.icon_2, R.mipmap.icon_3,04           R.mipmap.icon_4, R.mipmap.icon_5, R.mipmap.icon_6,05           R.mipmap.icon_7, R.mipmap.icon_8, R.mipmap.icon_9,06           R.mipmap.icon_10, R.mipmap.icon_1107   };08   //名字数组,引用资源文件中的文字09   private int[] names = {10           R.string.name1, R.string.name2, R.string.name3,11           R.string.name4, R.string.name5, R.string.name6,12           R.string.name7, R.string.name8, R.string.name9,13           R.string.name10, R.string.name1114   };15   //信息数组16   private int[] infos = {17           R.string.info1, R.string.info2, R.string.info3,18           R.string.info4, R.string.info5, R.string.info6,19           R.string.info7, R.string.info8, R.string.info9,20           R.string.info10, R.string.info1121   };22   private Context lContext;   //上下文23   private List<Integer> listIcon = new ArrayList<Integer>();   //图标集合24   private List<Integer> listName = new ArrayList<Integer>();   //名称集合25   private List<Integer> listInfo = new ArrayList<Integer>();   //信息集合26   public Adapter(Context context) {27       lContext = context;28       //设置菜单行数与行内图标、名称、信息29       for (int i = 0; i < 11; i++) {30           listIcon.add(icons[i]);31           listName.add(names[i]);32           listInfo.add(infos[i]);33       }34   }

(7)重写MyViewHolder onCreateViewHolder()方法,在该方法中实现获取列表中,每行item的布局文件。修改后代码如下:

01   @Override02   public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {03       //获取列表中,每行的布局文件04       View view = LayoutInflater.from(lContext).inflate(R.layout.layout_item, arg0, false);05       MyViewHolder holder = new MyViewHolder(view);           //

06       return holder;07   }

(8)重写onBindViewHolder()方法,在该方法中设置列表菜单中item(子项)所显示的内容。修改后代码如下:

01   @Override02   public void onBindViewHolder(final MyViewHolder holder, int position) {03       //设置图标04       holder.img.setBackgroundResource(listIcon.get(position));05       //设置名称06       holder.name.setText(listName.get(position));07       //设置信息08       holder.info.setText(listInfo.get(position));09   }

(9)重写getItemCount()方法,在该方法中实现返回数据集中的项目总数。修改后代码如下:

01   @Override02   public int getItemCount() {03       return listIcon.size();04   }

(10)打开主活动MainActivity.java文件,定义所需要的全局变量,在onCreate()方法中首先获取RecyclerView组件,然后为其设置列表布局管理器,最后为其设置适配器。具体代码如下:

01   public class MainActivity extends AppCompatActivity {02       private RecyclerView lRecyclerView;     //列表控件03       private Adapter lAdapter;                //适配器04       @Override05       protected void onCreate(Bundle savedInstanceState) {06           super.onCreate(savedInstanceState);07           setContentView(R.layout.activity_main);08           //获取列表控件09           lRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);10           //设置列表布局管理11           lRecyclerView.setLayoutManager(new LinearLayoutManager(this));12           //设置适配器13           lRecyclerView.setAdapter(lAdapter = new Adapter(this));14       }15   }

(10)在工具栏中,找到下拉列表框,然后单击要运行的应用(这里为QQMessageList),再单击右侧的运行按钮,运行效果如图27.27所示。

图27.27  模拟QQ消息列表

本文来自明日科技即将出版的《Android开发详解》,转载请注明出处!!!

转载于:https://www.cnblogs.com/mrxy/p/8176047.html

RecyclerView的基础用法相关推荐

  1. Android 性能优化lt;九 RecyclerView替代Listview用法

    Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...

  2. Pandas基础用法合集(中文官档)

    本节介绍 pandas 数据结构的基础用法.下列代码创建示例数据对象: In [1]: index = pd.date_range('1/1/2000', periods=8) In [2]: s = ...

  3. Promise基础用法

    什么是Promise? Promise是用来处理异步的; Promise就是承诺,对未来的承诺; 所谓的Promise(承诺),里面保存着未来才会结束的事件的结果; Promise是异步编程的一种解决 ...

  4. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】

    这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...

  5. dubbo官方文档中文_Pandas中文官方文档:基础用法5

    本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...

  6. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  7. Promise详解(一) ----基础用法

    什么是Promise Promise是由社区最早提出并实现的,后加入到es6规范中.为更好处理javascript异步问题,用于解决其多次异步回掉嵌套问题.下面先尝试下promise的基础用法吧. 创 ...

  8. ORACLE的基础用法

    ORACLE的基础用法 转 自:http://blog.163.com/kelly_19831017/blog/static/6196787020083133348873/ sqlplus sys/o ...

  9. MongoDB 基础用法及学习笔记

    MongoDB 基础用法 环境配置与安装 安装 查看MongoDB版本 启动MongoDB服务 检查服务状态 启动服务 打开配置文件,连接MongoDB 查看数据列表 退出 MongoDB 连接 Mo ...

  10. Python语言学习:python语言的特点、入门、基础用法之详细攻略

    Python语言学习:python语言的特点.入门.基础用法之详细攻略 相关内容 Python 基础教程 目录 python语言的特点 python语言的入门 python语言的基础用法 python ...

最新文章

  1. 设计模式05-建造者模式
  2. Keil主题皮肤设置,自用推荐
  3. Jackson 框架使用说明,轻易转换JSON【转】
  4. C++ STL 算法精选之查找篇
  5. 计算机操作基础英语,计算机操作基础word练习题参考答案
  6. vs 2008 Ide 设置
  7. 最终章 | TensorFlow战Kaggle“手写识别达成99%准确率
  8. 常用的排序算法总结(二)
  9. thymeleaf路径问题
  10. 【Linux】文件操作函数(系统调用函数)
  11. HTML5+CSS3 从入门到精通(2)
  12. qmc3格式文件转为mp3
  13. 安卓学习之路-RecyclerView的简单用法
  14. 谷歌应用程序无法启动,因为应用程序的并行配置不正确的问题解决方案
  15. java实现文章伪原创_网站伪原创的方法 - 百度搜狗360神马网站快速排名 - OSCHINA - 中文开源技术交流社区...
  16. [每日一氵] 正则表达式以x开头,以x结尾的字符串
  17. mac android 录屏软件,mac录屏怎么录内置声音?详细的解决方案
  18. JavaScript函数式编程之函子
  19. 盘点超好用的 Mac 键盘快捷键
  20. 给Ubuntu文件夹解锁

热门文章

  1. apk破解工具介绍与使用
  2. Cockos REAPER 6 for Mac - 强大的数字音频工作站
  3. 好用!Visual Studio for mac(微软代码编辑器)中文版
  4. Xilisoft iPad Magic Platinum for Mac一键下载在线视频并将其转换为 iPad?
  5. javascript中的滚动到顶部和Scroll有关的方法
  6. EasyRecovery如何恢复系统镜像
  7. ID3DXMesh接口 创建自己的立方体网格
  8. maven 相关简介,和操作命令
  9. Flask框架-模板
  10. mst多生成树优化及规范