Android基础——RecycleView
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>,重写相关方法,其中:
- T为内部类ViewHolder继承,用于RecyclerView.ViewHolder,传入参数为适配布局的View实例
- 构造方法用于接收并维护数据
- onCreateViewHolder()加载适配布局传入ViewHolder并返回,viewType用于和getItemViewType()根据不同数据返回对应布局
- onBindViewHolder()用于将控件和数据进行绑定
- 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相关推荐
- android 悬浮按钮 魅族,Android使用RecycleView实现魅族手机通讯录界面
原标题:Android使用RecycleView实现魅族手机通讯录界面 本文作者 本文由_小马快跑_投稿. _小马快跑_的博客地址: http://www.jianshu.com/u/18502855 ...
- Android基础知识点学习总结
Android基础知识点学习总结 安卓基础知识个人学习笔记分享~ 一.Android系统架构 Linux内核层→系统运行层→应用框架层→应用层 1.Linux内核层:Android系统是基于Linux ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- Android基础知识笔记
## Android基础面试题 (⭐⭐⭐) #### 1.什么是ANR 如何避免它? 答:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应 用程 ...
- Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库
Android基础新手教程--1.5.2 Git之使用GitHub搭建远程仓库 标签(空格分隔): Android基础新手教程 本节引言: 在上一节中.我们学习了怎样使用Git.构建我们的本地仓库.轻 ...
- android intent 源码,Android 基础之 IntentService 源码
Android 基础之 IntentService 源码 Android,IntentService,源码 IntentService 位于 android.app 包下面,是 Service 的一个 ...
- 【Android基础】动画
Android里的动画分为两类,以3.0版本为分水岭. 3.0前已存在 帧动画 补间动画 3.0出现 属性动画 帧动画 顾名思义,快速切换几张图片来达到动画的效果. 建立帧动画xml Note:不要把 ...
- 基于Android移动终端的微型餐饮管理系统的设计与实现4——Android基础
本章将介绍一些在开发中用到的一些常用且值得介绍的Android 基础知识和技术,包括Fragment.Slidingmenu.RecyelerView.HelloCharts框架和Ormlite框架. ...
- 关于android基础教程一书的初步解读后发现的一些问题
我是一个比较固执的人..在进行android基础教程一书的初步学习之后,说实话,这本书虽然说为了照顾有需要的童鞋,提供了所有的源代码,就连我也在亲自打了好久的代码之后最后决定放弃,也偷偷懒,进行简单无 ...
最新文章
- 去除浏览器ip检测_浏览器怎么多开换ip,每个窗口不同的独立IP-VMLogin中文版指纹浏览器...
- 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
- sklearn自学指南(part44)--生成数据集
- 提高Java的锁性能
- java自学路线图_JAVA自学路线图
- Ubuntu: 创建PlayOnLinux快捷键 Create PlayOnLinux Application Desktop
- ios 友盟第三方登录遇到的各种坑。
- 新建oracle数据库 环境查询,Oracle单实例数据库迁移到Oracle RAC 环境之(2)--实施篇...
- wince系统usb刷机工具_中兴B860AV1.2-S905L刷机救砖教程,喜欢的分享一下
- PHP中的异常和错误(转载)
- CANape XCP on CAN工程创建
- 解决servlet中post请求和get请求中文乱码现象
- 苹果手机如何制作铃声
- 小白入门Python Web开发介绍(持续更新)
- 最新计算机台式机小机箱,几款热门台式机主机机箱的参数配置【图文】
- mpvue利用painter生成海报
- ll -h和du -sh的区别
- 基于SpringBoot实现微信消息推送
- Android子系统
- 东北师范大学计算机考研参考书,东北师范大学(专业学位)计算机技术考研参考书目...