RecyclerView的使用

  • 前言

    • 在之前的博客中我介绍了ListView如何使用,当然那部分博客由于没有考虑基础的问题,写的跨度太大,后面我会全部重构的。
    • ListView是一个滑动列表控件,随着手指的滑动,让屏幕外的内容到达屏幕内,屏幕内的内容移除屏幕区域,一度被认为这是最常用也最难用的控件。(焦点、高度等问题层出不穷)但是,ListView有几个致命的弊端,尤其的就是运行效率了,可能小项目还看不出来,但是填充数据大的时候,ListView的劣势就体现出来了。
    • 当然,在之前,我们选择两种主要手段提高效率。(即使用convertView代替getView(),建立内部类ViewHolder缓存控件示例,避免重复控件绑定)
  • 背景
    • 为了方便用户的使用,拜托ListView的限制(只能纵向延伸),官方新增了控件RecyclerView,它被放在support库中,所以使用需要添加依赖如下.

      • implementation 'com.android.support:recyclerview-v7:27.1.1'
    • 相比于ListView它优化了效率,且支持横向滚动和瀑布流布局。还有很多优点可以查看官方文档。
  • 使用
    • 布局中加入:编辑默认生成的activity_main.xml如下,添加控件如下

      • <android.support.v7.widget.RecyclerView
      • android:id="@+id/recycler_view"
      • android:layout_width="match_parent"
      • android:layout_height="match_parent">
      • </android.support.v7.widget.RecyclerView>
    • 创建适配器:创建java文件MyRecycleViewAdapter.java
      • package com.zc.testforrecyclerview;import android.support.annotation.NonNull;
        import android.support.v7.widget.RecyclerView;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.TextView;
        import android.widget.Toast;import java.util.List;public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {private List<String> mData;static class ViewHolder extends RecyclerView.ViewHolder{View myView;TextView content;public ViewHolder(View view){super(view);myView = view;content = view.findViewById(R.id.content);}}public MyRecyclerViewAdapter(List<String> Data){mData = Data;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.content, null, false);final ViewHolder holder = new ViewHolder(view);holder.myView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int position = holder.getAdapterPosition();String str = mData.get(position);Toast.makeText(view.getContext(), "你点击了第"+Integer.toString(position)+"项", Toast.LENGTH_LONG).show();}});return holder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {String name = mData.get(position);holder.content.setText(name);}@Overridepublic int getItemCount() {return mData.size();}
        }
        
    • 注册点击事件
      • 很遗憾,RecyclerView没有提供类似ListView那样的setOnItemClickListener的方法,当然这不是没写,而是ListView注册事件不是很人性化,它注册的是子项事件但是当我想要点击子项中的某个控件就有很多焦点问题,处理比较麻烦,RecyclerView没有这个问题,他的点击事件写在适配器中。
      • 见上面代码。
    • 运行结果
  • 补充说明
    • 参考书《第一行代码》
    • 具体项目完整代码见我的GitHub,上层目录也有Kotlin代码。

安卓进阶系列-05列表控件(RecyclerView)的使用相关推荐

  1. 安卓案例:列表控件上拉加载更多

    文章目录 一.上拉加载更多使用场景 二.案例演示 - 列表控件上拉加载更多 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[ListViewLoadMore] 2.将背景图片拷贝到 ...

  2. .Net强大的列表控件XPTable【进阶版】

    旧版本 2012年分享过XPTable的一个版本源码,其中包含了我对其若干bug的修正.链接在此:.Net强大的列表控件XPTable Github上别人的更新 Github最新源码地址:https: ...

  3. [翻译]Chameleon介绍(3) : 列表控件

    [原文]http://getben.com/archive/2007/01/11/introduction-to-chameleon-list-base-controls.aspx 这篇文章属于我的文 ...

  4. android tv 开发布局,Android TV开发总结(七)构建一个TV app中的剧集列表控件

    前言:剧集类控件,在TV app中非常常见,今天将介绍构建一个TV app中的剧集列表控件,此控件上传到我的Github:https://github.com/hejunlin2013/Episode ...

  5. 安卓进阶系列-02搜索框(PersistentSearch)的使用

    这篇文章主要介绍安卓开发中常用的搜索框控件的使用. 为第三方控件,需要添加依赖如下. 'com.quinny898.library.persistentsearch:library:1.1.0-SNA ...

  6. SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  7. android 固定底部 布局_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  8. android listview添加数据_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  9. Android ExpandableListView 展开列表控件(手机QQ好友列表)

    你是否觉得手机QQ上的好友列表那个控件非常棒?  不是.....   那也没关系, 学多一点知识对自己也有益无害. 那么我们就开始吧. 展开型列表控件, 原名ExpandableListView 是普 ...

最新文章

  1. 部署war包到阿里云liunx的tomcat时报错:zip END header not found
  2. 孤灯php加密,PHP实现观察者模式
  3. 小米bl未解锁变砖了如何刷机_如何安装MIUI 10
  4. linux设置进程不忽略信号,Linux下后台进程编写中屏蔽信号
  5. 单库单服解决方案terraform部署实践
  6. 我的kindle书单
  7. python贪吃蛇设计思路_Python深度剖析贪吃蛇游戏的设计与实现
  8. 【服务器配置】php move_uploaded_file文件移动失败
  9. 【简单】字符串中最长元音字符串的长度
  10. python在tk界面播放本地视频_如何使用python3在tkinter窗口中插入视频播放器?
  11. LightOJ1197 Help Hanzo —— 大区间素数筛选
  12. windows画图板 ESL转RGB 实现区间渐变色
  13. “新基遇 星生态 心未来” 星际无限&神算云全球发布暨表彰盛典在深顺利召开
  14. 如何关闭win10防火墙_如何彻底关闭win10自带杀毒软件:windows defender?
  15. 互联网金融项目数据分析
  16. 2021高考成绩排名查询河北,河北高考排名查询方法,2021年河北高考成绩位次全省排名查询...
  17. 北大资源燕南业主总群 326680907
  18. redis内存理解---内存消耗
  19. 跨傻瓜交换机通hybrid模式vlan成功
  20. selenium_3种等待以及unittest测试框架_智能等待

热门文章

  1. ObjectFactory 的create()方法什么时候被调用?
  2. 接口中私有方法【应用】
  3. 数据验证和JSR303
  4. Oracle之垂直水平分库分表(一)
  5. spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持
  6. AtomicStampedReference实现
  7. axios nodejs 上传图片_vue项目中使用axios上传图片等文件操作
  8. 解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX
  9. ubuntu/linux运行shell脚本sudo自动输入密码(亲测可以)
  10. Linux 初始化脚本 (centos6 centos7 通用)