RecycleView

  • RecycleView是什么?
  • RecycleView使用
  • 瀑布流滚动
  • 横向滚动
  • RecycleView点击事件

RecycleView是什么?

RecycleView是进阶版的ListView,不仅可以实现ListView的纵向滑动,还可以横向滑动和瀑布流滑动。

RecycleView使用

使用RecycleView需要在build.gradle中添加相应的依赖库:

implementation "androidx.recyclerview:recyclerview:1.2.1"

在activity_main.xml中添加RecyclerView控件

<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycle_view"android:layout_width="match_parent"android:layout_height="match_parent" />

准备数据,创建bean类:

public class Data {private String name;private int imageId;public Data(String name, int imageId) {this.name = name;this.imageId = imageId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getImageId() {return imageId;}public void setImageId(int imageId) {this.imageId = imageId;}
}

创建适配布局list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/recycle_view_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/recycle_view_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

创建适配布局的适配器RecycleViewAdapter继承RecyclerView.Adapter<T>,重写相关方法,其中:

  1. T为内部类ViewHolder继承,用于RecyclerView.ViewHolder,传入参数为适配布局的View实例
  2. 构造方法用于接收并维护数据
  3. onCreateViewHolder()加载适配布局传入ViewHolder并返回,viewType用于和getItemViewType()根据不同数据返回对应布局
  4. onBindViewHolder()用于将控件和数据进行绑定
  5. getItemCount()用于返回数据长度
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> {private List<Data> mDataList;public class ViewHolder extends RecyclerView.ViewHolder {ImageView DataIv;TextView DataTv;public ViewHolder(@NonNull View itemView) {super(itemView);DataIv = itemView.findViewById(R.id.recycle_view_iv);DataTv = itemView.findViewById(R.id.recycle_view_tv);}}public RecycleViewAdapter(List<Data> mDataList) {this.mDataList = mDataList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);ViewHolder holder = new ViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Data data = mDataList.get(position);holder.DataIv.setImageResource(data.getImageId());holder.DataTv.setText(data.getName());}@Overridepublic int getItemCount() {if(mDataList != null){return mDataList.size();}return 0;}
}

修改MainActivity,为RecyclerView设置布局方向和适配器

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycle_view);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);recyclerView.setLayoutManager(linearLayoutManager);List<Data> dataList = new ArrayList<>();for (int i = 0; i < 20; i++) {Data data = new Data("data"+i,R.mipmap.ic_launcher);dataList.add(data);}RecycleViewAdapter recycleViewAdapter = new RecycleViewAdapter(dataList);recyclerView.setAdapter(recycleViewAdapter);}
}

效果图:

瀑布流滚动

修改适配布局list_item.xml中的LinearLayout父布局,设置为垂直排列

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/recycle_view_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/recycle_view_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

将LinearLayoutManager修改为StaggeredGridLayoutManager即可修改为瀑布流,瀑布流的宽度是由布局的列数自动适配的,这里的列数为3:

StaggeredGridLayoutManager layoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);

效果图(当图片和文字不一时才会显示的更好看,类似小红书):

横向滚动

修改适配布局list_item.xml中的LinearLayout父布局,将宽度控制为100,避免过大:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="100dp"android:orientation="vertical"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/recycle_view_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/recycle_view_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

修改MainAcitivity中的代码,在创建LinearLayoutManager后通过setOrientation方法修改为横向滚动

layoutManager.setOrientation(RecyclerView.HORIZONTAL);

效果图:

RecycleView点击事件

RecycleView的点击事件需要分别给各个子控件设置,在Viewholder类中创建成员变量维护适配布局的View,在onCreateViewHolder()给最外层布局和ImageView设置点击事件:

public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> {private List<Data> mDataList;public class ViewHolder extends RecyclerView.ViewHolder {ImageView DataIv;TextView DataTv;View ItemView;public ViewHolder(@NonNull View itemView) {super(itemView);ItemView = itemView;DataIv = itemView.findViewById(R.id.recycle_view_iv);DataTv = itemView.findViewById(R.id.recycle_view_tv);}}public RecycleViewAdapter(List<Data> mDataList) {this.mDataList = mDataList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);final ViewHolder holder = new ViewHolder(view);holder.ItemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int position = holder.getAbsoluteAdapterPosition();Data data = mDataList.get(position);Toast.makeText(v.getContext(), "click"+data.getName(), Toast.LENGTH_SHORT).show();}});holder.DataIv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}});return holder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Data data = mDataList.get(position);holder.DataIv.setImageResource(data.getImageId());holder.DataTv.setText(data.getName());}@Overridepublic int getItemCount() {if(mDataList != null){return mDataList.size();}return 0;}
}

Android基础——RecycleView相关推荐

  1. android 悬浮按钮 魅族,Android使用RecycleView实现魅族手机通讯录界面

    原标题:Android使用RecycleView实现魅族手机通讯录界面 本文作者 本文由_小马快跑_投稿. _小马快跑_的博客地址: http://www.jianshu.com/u/18502855 ...

  2. Android基础知识点学习总结

    Android基础知识点学习总结 安卓基础知识个人学习笔记分享~ 一.Android系统架构 Linux内核层→系统运行层→应用框架层→应用层 1.Linux内核层:Android系统是基于Linux ...

  3. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  4. Android基础知识笔记

    ## Android基础面试题 (⭐⭐⭐) #### 1.什么是ANR 如何避免它? 答:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应 用程 ...

  5. Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库

    Android基础新手教程--1.5.2 Git之使用GitHub搭建远程仓库 标签(空格分隔): Android基础新手教程 本节引言: 在上一节中.我们学习了怎样使用Git.构建我们的本地仓库.轻 ...

  6. android intent 源码,Android 基础之 IntentService 源码

    Android 基础之 IntentService 源码 Android,IntentService,源码 IntentService 位于 android.app 包下面,是 Service 的一个 ...

  7. 【Android基础】动画

    Android里的动画分为两类,以3.0版本为分水岭. 3.0前已存在 帧动画 补间动画 3.0出现 属性动画 帧动画 顾名思义,快速切换几张图片来达到动画的效果. 建立帧动画xml Note:不要把 ...

  8. 基于Android移动终端的微型餐饮管理系统的设计与实现4——Android基础

    本章将介绍一些在开发中用到的一些常用且值得介绍的Android 基础知识和技术,包括Fragment.Slidingmenu.RecyelerView.HelloCharts框架和Ormlite框架. ...

  9. 关于android基础教程一书的初步解读后发现的一些问题

    我是一个比较固执的人..在进行android基础教程一书的初步学习之后,说实话,这本书虽然说为了照顾有需要的童鞋,提供了所有的源代码,就连我也在亲自打了好久的代码之后最后决定放弃,也偷偷懒,进行简单无 ...

最新文章

  1. 去除浏览器ip检测_浏览器怎么多开换ip,每个窗口不同的独立IP-VMLogin中文版指纹浏览器...
  2. 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
  3. sklearn自学指南(part44)--生成数据集
  4. 提高Java的锁性能
  5. java自学路线图_JAVA自学路线图
  6. Ubuntu: 创建PlayOnLinux快捷键 Create PlayOnLinux Application Desktop
  7. ios 友盟第三方登录遇到的各种坑。
  8. 新建oracle数据库 环境查询,Oracle单实例数据库迁移到Oracle RAC 环境之(2)--实施篇...
  9. wince系统usb刷机工具_中兴B860AV1.2-S905L刷机救砖教程,喜欢的分享一下
  10. PHP中的异常和错误(转载)
  11. CANape XCP on CAN工程创建
  12. 解决servlet中post请求和get请求中文乱码现象
  13. 苹果手机如何制作铃声
  14. 小白入门Python Web开发介绍(持续更新)
  15. 最新计算机台式机小机箱,几款热门台式机主机机箱的参数配置【图文】
  16. mpvue利用painter生成海报
  17. ll -h和du -sh的区别
  18. 基于SpringBoot实现微信消息推送
  19. Android子系统
  20. 东北师范大学计算机考研参考书,东北师范大学(专业学位)计算机技术考研参考书目...

热门文章

  1. Vue源码系列 - 前言
  2. APP推广案例之星巴克APP营销方式
  3. leaflet 加载腾讯地图
  4. PAT甲级1100 Mars Numbers (20 分)题解
  5. python训练营 朋友圈点赞收费吗_千万不要随便在朋友圈点赞!
  6. java实训西游记人物实现_学习练习 java编写西游记人物类
  7. 计算机组成原理——CPU功能结构 指令周期 数据通路 控制器 流水线
  8. iphoneX系列手机在页面滚动时隐藏底部的操作栏
  9. pic12f1823单片机入门_PIC单片机新手快速入门
  10. 给 iOS 开发者的 Flutter 指南(上)