前言
实践是最好的学习方式,技术也如此。
一、简介
RecyclerView
是列表;- 好处:更高效率的列表控件;
- 用法:重点
RecycleerView.Adapter
的写法;可以通过LayoutManager
(布局管理器)来决定布局的样式,是线性的、网格列表还是瀑布流列表; RecyclerView
列表是如何实现显示的 ?- 是将数据放到对应的位置上,根据数据内容的数量来显示(即告诉列表有多少个条目) ;
二、Adapter
-
是什么
- 适配器、连接器;
-
为什么要有
Adapter
?- 列表中不只有一条数据,不像
TextView
、ImageView
一样,一个控件对应一条数据; - 列表形式的数据,如何将多个布局与多个数据连接起来?中间就通过
adapter
,将数据放到对应的控件的位置;
- 列表中不只有一条数据,不像
-
Adapter 的分类
ArrayAdapter
:简单列表;SimpleAdapter
:图文列表;BaseAdapter
:图文复杂列表 ;
三、示例
1、背景
用 RecyclerView 列表显示各个城市天气数据
2、代码
-
FutureWeatherAdapter
是一个自定义的适配器类,它继承自 RecyclerView.Adapter 类;在泛型参数中,指定了一个内部类 WeatherViewHolder 作为适配器的视图持有者- WeatherViewHolder 是用于在 RecyclerView 中显示每个天气数据的视图持有者类;
- 通常情况下,你会在适配器内部定义一个继承自 RecyclerView.ViewHolder 的内部类来表示列表项的视图结构和布局
-
onCreateViewHolder()
方法用于创建 ViewHolder,即创建用于显示单个天气条目的视图,并返回 ViewHolder 对象;使用布局填充器从 XML 布局文件中实例化视图,并将其传递给自定义的 ViewHolder 对象。- 在创建新的 ViewHolder 实例时调用。当 RecyclerView 需要显示新的列表项时,会调用该方法来创建一个 ViewHolder 对象 ;
- onCreateViewHolder() 返回的 ViewHolder 对象会被 RecyclerView 用于显示列表项。当 RecyclerView 需要显示新的列表项时,它会调用 onCreateViewHolder() 方法来创建一个新的 ViewHolder 对象,并将其返回
-
onBindViewHolder()
方法用于将数据绑定到 ViewHolder 上,即将具体的天气数据填充到对应的视图控件中。在这个方法中,获取当前位置的天气数据对象,然后将其属性分别设置到 ViewHolder 中的各个 TextView 和 ImageView 中;- 方法在 RecyclerView 需要将数据绑定到 ViewHolder 以显示新的列表项时被调用。当 RecyclerView 中的列表项需要更新或者需要显示新的列表项时,会调用该方法;
-
getItemCount()
方法用于获取数据集中的条目数,即天气数据列表的大小;- getItemCount() 方法返回的数据会告诉 RecyclerView 有多少个列表项需要在屏幕上显示。当 RecyclerView 需要确定列表的大小时,它会调用 getItemCount() 方法
-
内部类 WeatherViewHolder
继承自 RecyclerView.ViewHolder,用于持有每个天气条目的视图控件的引用;在构造方法中,通过传入的视图参数找到并引用了各个视图控件;public class FutureWeatherAdapter extends RecyclerView.Adapter<com.example.weatherapp.adapter.FutureWeatherAdapter.WeatherViewHolder> { private Context mContext; // 上下文 private List<DayWeatherBean> mWeatherBeans; // 数据 public FutureWeatherAdapter(Context mContext, List<DayWeatherBean> mWeatherBeans) { this.mContext = mContext; this.mWeatherBeans = mWeatherBeans; } // 先创建ViewHolder再将数据绑定 @NonNull @Override public WeatherViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // onCreateViewHolder()方法负责创建ViewHolder并将其返回给RecyclerView View view = LayoutInflater.from(mContext).inflate(R.layout.weather_item_layout, parent, false); // 布局 WeatherViewHolder weatherViewHolder = new WeatherViewHolder(view); return weatherViewHolder; } @Override public void onBindViewHolder(@NonNull WeatherViewHolder holder, int position) { // onBindViewHolder()方法负责将数据绑定到ViewHolder // holder: 表示要绑定的ViewHolder对象,position: 表示ViewHolder在RecyclerView中的位置 // onBindViewHolder()方法负责将数据填充到ViewHolder的视图中 // 它会被调用多次,每次RecyclerView需要显示一个新的ViewHolder时都会调用 DayWeatherBean weatherBean = mWeatherBeans.get(position); // 拿到当前位置的JavaBean对象 holder.tvWeather.setText(weatherBean.getWea()); holder.tvTem.setText(weatherBean.getTeamDay()); holder.tvAir.setText(weatherBean.getWin_speed()); holder.tvWin.setText(weatherBean.getWin()); holder.tvTemLowHigh.setText(weatherBean.getTeamNight()); holder.ivWeather.setImageResource(getImgResOfWeather(weatherBean.getWeaImg())); } // 总共有多少个条目 @Override public int getItemCount() { return (mWeatherBeans == null) ? 0 : mWeatherBeans.size(); } class WeatherViewHolder extends RecyclerView.ViewHolder { TextView tvWeather, tvTem, tvTemLowHigh, tvWin, tvAir; ImageView ivWeather; public WeatherViewHolder(@NonNull View itemView) { super(itemView); tvWeather = itemView.findViewById(R.id.tv_weather); tvAir = itemView.findViewById(R.id.air); tvTem = itemView.findViewById(R.id.tv_tem); tvTemLowHigh = itemView.findViewById(R.id.tv_tem_low_high); tvWin = itemView.findViewById(R.id.tv_win); ivWeather = itemView.findViewById(R.id.iv_weather); } }
最后
为了方便大家学习,这里分享一份小编整理了三天三夜的车载路线图+学习资料!!!无偿分享给有缘人!有需要的朋友,可以扫描下方二维码免费领取!!!
《Android车载操作系统开发揭秘》
车载架构篇
- 一、汽车软硬架构 - EEA/SOA
- 二、汽车操作系统
- 三、智能座舱
- 四、未来,也许智能家、智能车、智能手机、智能穿戴、科技一体化
- 五、从智能汽车畅想未来全生态
基础篇
- 1.Android Automotive OS 安卓车载操作系统白皮书
- 2.1Andorid Automotive 源码osp_coral_car 项目构建流程
- 2.2 Andorid Automotive 镜像刷写流程
- 2.3 Andorid Automotive 源码aosp_coral_car 项目构建及刷写错误集锦
- 2.4 Android Automotive OS 构建失败Debug 集锦(持续更新)
- 3.[Android Automotive]Android 工具和基础架构
- 4.[Android Automotive]车载音频
- 5.[Android Automotive]音频多区
- …
内核篇
- 1.Android 内核配置信息
系统调试篇
- 调试踩坑FAQ(编译)
- 1.‘Native registration unable to find cl
ass ‘com/android/internal/os/RuntimeInit‘; - 2.解决 Android Automotive OS 悬浮框或者
PointerLocation 无法正常显示的问题
LMKD
- 一、Android低内存查杀守护进程(Android12)
- 二、PSI压力失速信息
- 三、LMKD的设计原理
- 四、LMKD初始化
- 五、PSI监视器初始化及其工作原理
- 六、Vmpressuser监视器初始化及其工作原理
- 七、AMS与LMKD
- 八、通过填充内存触发lmkd查杀
- 九、lmkd进程查杀规则
- 十、lmkd进程查杀配置
- 十一、有问有答-FAQ
Android车载实战篇
- 1.Android车载图像显示系统
- 2.Android车载概念
- 3.开发汽车媒体应用
- 4.构建Android Auto即时通信应用
- 5.构建车载导航和地图注点应用
- 6.构建Android Automotive OS视频应用
- 7.测试Android车载应用
- 8.分发Android汽车应用
- 9.适用于汽车的GoodlePlay服务
- 10.Android Automotive OS的通知
SOA架构通信篇
- 一、前言
- 二、注册中心-ServiceRegistry
- 三、FDBus的分层服务发现策略
- 四、服务发现各级描述
- 五、服务发现的范围控制
- 六、关于FDBus