(第1部分:项目整体架构)

编辑一、项目特点
1.高性能列表展示
2.多种内容布局(单图、三图、视频等)
3.数据驱动 UI
4.良好的用户交互体验
本项目基于 Android Studio 实现一个简化版“今日头条”,重点不在业务复杂度,而在于:
掌握 Android 核心开发能力
包括:
1.资源管理机制
2.布局系统设计
3.RecyclerView 使用
4.Adapter 架构设计
二、项目功能概述
本项目实现的功能如下:
1 新闻列表展示
通过 RecyclerView 展示新闻数据,包括:
1.标题
2.图片
3.来源
4.评论数
5.发布时间
2 多布局展示(核心)
项目支持两种新闻展示形式:
| 类型 | 描述 |
|---|---|
| 单图 | 左文右图 |
| 三图 | 上文下三图 |
3 置顶新闻
第一条新闻具有“置顶标识”,通过特殊 UI 展示。
4 模拟数据加载
使用本地数据模拟新闻列表:
1.不依赖网络
2.便于教学与理解
三、项目结构深度解析
3.1 Java 层结构
cn.edu.headline
├── MainActivity
├── NewsAdapter
├── NewsBean
3.2 各模块职责分析
1 MainActivity(控制层)
作用:
1.初始化界面
2.构造数据
3.绑定 RecyclerView
本质:页面入口+数据调度中心
2 NewsAdapter(核心层)
作用:
1.创建 ViewHolder
2.绑定数据
3.控制布局类型
本质:数据->UI的桥梁
3 NewsBean(数据层)
作用:
1.封装新闻数据
2.提供统一数据结构
本质:数据模型(Model)
四、资源结构设计(Res 目录)
4.1 目录结构
res/
├── layout
├── drawable
├── mipmap
├── values
4.2 layout(布局资源)
包含:
1.activity_main.xml
2.list_item_one.xml
3.list_item_two.xml
4.title_bar.xml
用于定义 UI 界面结构
4.3 drawable(图片资源)
用于:
1.新闻图片
2.图标(如置顶标识)
4.4 values(公共资源)
包含:
1.样式(style)
2.颜色(color)
3.字符串(string)
实现代码复用
五、核心技术点概览
5.1 RecyclerView
用于高效展示列表数据
特点:
1.支持 View 复用
2.支持多布局
3.性能优于 ListView
5.2 Adapter 机制
连接:数据(List)<->界面(RecyclerView)
5.3 多布局实现
通过:type->控制不同布局实现:
1.单图新闻
2.三图新闻
5.4 ViewHolder 机制
作用:
1.缓存 View
2.提升性能
六、设计模式分析
6.1 MVC 架构
本项目采用经典 MVC 思想:
| 层级 | 模块 |
|---|---|
| Model | NewsBean |
| View | XML布局 |
| Controller | MainActivity |
6.2 数据驱动 UI 思想
核心逻辑:数据->决定界面
举例:
| 数据 | UI |
|---|---|
| type=1 | 单图 |
| type=2 | 三图 |
6.3 解耦设计
项目中:
1.数据与 UI 分离
2.逻辑与展示分离
提高可维护性
七、项目运行流程分析
7.1 启动流程
App启动 → MainActivity → setContentView
7.2 数据流程
构造数据 → List<NewsBean>
7.3 UI绑定流程
RecyclerView → Adapter → ViewHolder → 显示
(第2部分:Android资源体系)
一、Android 资源体系概述
在 Android 开发中,资源(Resource)是指所有非代码内容,包括:
1.UI 布局
2.图片
3.颜色
4.字符串
5.样式
这些资源统一存放在:res/
Android 的核心思想之一:代码和资源分离
二、资源分类总览
Android 资源主要包括:
| 类型 | 目录 | 作用 |
|---|---|---|
| layout | res/layout | 界面布局 |
| drawable | res/drawable | 图片资源 |
| mipmap | res/mipmap | 应用图标 |
| values | res/values | 公共资源 |
| color | res/color | 颜色 |
| menu | res/menu | 菜单 |
| anim | res/anim | 动画 |
三、layout(布局资源)
3.1 layout 的作用
layout 用于定义:界面结构(UI)
3.2 本项目中的 layout 文件
| 文件 | 作用 |
|---|---|
| activity_main.xml | 主界面 |
| list_item_one.xml | 单图新闻 |
| list_item_two.xml | 三图新闻 |
| title_bar.xml | 标题栏 |
3.3 layout 的本质
layout 本质是:XML描述UI树结构
例如:
LinearLayout
├── TextView
├── ImageView
3.4 布局加载过程
当调用:
setContentView(R.layout.activity_main);
系统会:
XML → View对象 → 显示在屏幕
3.5 布局在本项目中的作用
1.定义新闻结构
2.控制 UI 排列
3.与 Adapter 配合展示数据
四、drawable(图片资源)详解
4.1 drawable 的作用
用于存放:
1.图片(jpg/png)
2.图标
3.shape图形
4.2 本项目中的 drawable
例如:
R.drawable.food
R.drawable.sleep1
R.drawable.top
4.3 使用方式
在 Java 中:
imageView.setImageResource(R.drawable.food);
4.4 drawable 的分类
| 类型 | 说明 |
|---|---|
| bitmap | 普通图片 |
| shape | 自定义图形 |
| selector | 状态选择器 |
4.5 在本项目中的作用
新闻图片展示核心来源
五、values(公共资源)深度解析
5.1 values 的作用
用于定义:可复用的资源
5.2 常见文件
| 文件 | 作用 |
|---|---|
| strings.xml | 字符串 |
| colors.xml | 颜色 |
| styles.xml | 样式 |
六、style(样式)详解
6.1 什么是 style
style 用于:统一UI风格
6.2 本项目中的使用
style="@style/tvInfo"
6.3 style 的优势
1 代码复用
避免重复写:
android:textSize
android:textColor
2 统一风格
所有 TextView 风格一致
3 易维护
只需修改一处即可
6.4 style 在三图布局中的应用
三张图片统一尺寸
七、color(颜色资源)
7.1 定义
#FF0000
7.2 使用
android:textColor="@color/primary"
八、资源引用机制
8.1 R文件
Android 会自动生成:
R.layout.xxx
R.drawable.xxx
8.2 引用方式
| 类型 | 示例 |
|---|---|
| layout | R.layout.activity_main |
| drawable | R.drawable.food |
| id | R.id.tv_title |
8.3 编译流程
XML资源 → 编译 → R.java → Java代码调用
九、本项目资源协作机制
9.1 数据 → 资源 → UI
NewsBean → Adapter → layout → drawable
9.2 示例流程
NewsBean.imgList
↓
Adapter读取
↓
setImageResource
↓
显示图片
9.3 多布局资源协作
type → 选择 layout
imgList → 填充图片
(第3部分:Android布局体系)
一、Android 布局系统概述
在 Android 开发中,布局(Layout)用于控制:
控件如何在屏幕上排列
核心作用
布局决定:
1.控件位置
2.控件大小
3.控件关系
布局的本质
ViewGroup(容器) + View(控件)
二、常见布局类型总览
Android 中常用布局包括:
| 布局 | 特点 |
|---|---|
| LinearLayout | 线性排列 |
| RelativeLayout | 相对定位 |
| FrameLayout | 层叠布局 |
| TableLayout | 表格布局 |
| ConstraintLayout | 约束布局(推荐) |
三、LinearLayout(线性布局)
3.1 基本概念
LinearLayout 按顺序排列子控件:水平 或 垂直
3.2 核心属性
android:orientation="vertical"
3.3 示例
<LinearLayout>
<TextView/>
<TextView/>
</LinearLayout>
3.4 权重(weight)
android:layout_weight="1"
3.7 本项目中的应用
1 主布局
LinearLayout(垂直)
2 信息栏
LinearLayout(水平)
显示:
1.作者
2.评论
3.时间
四、RelativeLayout(相对布局)
4.1 基本概念
RelativeLayout 通过“相对关系”定位控件:
相对于父布局 或 其他控件
4.2 核心属性
layout_below
layout_toRightOf
layout_alignParentBottom
4.3 示例
<TextView id="A"/>
<TextView layout_below="@id/A"/>
4.6 本项目中的应用(重点)
1 单图布局
RelativeLayout
├── 左侧文字
├── 右侧图片
2 三图布局
标题在上
图片在中
信息在下
RelativeLayout 负责整体结构控制
五、FrameLayout(帧布局)
5.1 基本概念
所有子控件叠加在一起
5.2 特点
- 后添加的覆盖前面的
- 类似“图层”
5.3 示例
<FrameLayout>
<ImageView/>
<TextView/>
</FrameLayout>
5.4 使用场景
- Fragment 容器
- 弹窗
- 覆盖效果
5.5 本项目情况
未使用,但可以用于:
实现图片+文字叠加
六、TableLayout(表格布局)
6.1 基本概念
类似HTML表格
6.2 特点
- 自动对齐列
- 行列结构
6.3 使用场景
- 表单
- 数据展示
6.4 本项目情况
未使用(新闻类 UI 不适合)
(第4部分:activity_main.xml )
一、activity_main.xml 作用概述
在 Android 项目中,activity_main.xml 是:
主界面布局文件
它负责定义应用启动后用户看到的第一屏 UI 结构。
二、整体结构分析
根据你的代码,整体结构如下:
LinearLayout(垂直)
├── include(title_bar)
├── 分类导航栏(TextView 横向排列)
├── RecyclerView(新闻列表)
三、最外层布局解析
3.1 LinearLayout(根布局)
<LinearLayout
android:orientation="vertical">
为什么使用 LinearLayout?
原因:
页面是“从上到下”排列的
布局效果
标题栏
↓
分类栏
↓
新闻列表
四、include 布局复用机制(重点)
4.1 代码
<include layout="@layout/title_bar"/>
4.2 什么是 include?
include 是 Android 提供的:
布局复用机制
4.3 为什么要使用 include?
如果不用 include:
每个页面都要写一遍标题栏
问题:
- 代码重复
- 难维护
五、分类导航栏解析
5.1 结构
<LinearLayout orientation="horizontal">
<TextView text="推荐"/>
<TextView text="动漫"/>
<TextView text="实时"/>
</LinearLayout>
5.2 作用
实现类似:
今日头条顶部分类栏
5.3 为什么用 LinearLayout?
原因:
多个标签横向排列
六、RecyclerView 核心区域解析
6.1 代码结构
<RecyclerView
android:id="@+id/rv_list"/>
6.2 RecyclerView 的作用
用于:
显示“新闻列表”
6.3 为什么使用 RecyclerView?
相比 ListView:
| RecyclerView | ListView |
|---|---|
| 支持多布局 | 不方便 |
| 性能更高 | 一般 |
| 可扩展性强 | 较弱 |
6.4 在 MainActivity 中绑定
mRecyclerView = findViewById(R.id.rv_list);
6.5 设置布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
6.6 设置 Adapter
mRecyclerView.setAdapter(mAdapter);
6.7 数据流过程
NewsBean → Adapter → ViewHolder → RecyclerView → 显示
七、页面渲染流程(重点)
7.1 启动流程
MainActivity.onCreate()
↓
setContentView()
↓
加载 XML
↓
生成 View 树
7.2 数据绑定流程
setData()
↓
List<NewsBean>
↓
Adapter
↓
RecyclerView 显示
八、UI 分层结构分析(重要)
8.1 分层思想
页面 = 多层结构组合
8.2 本项目分层
| 层级 | 内容 |
|---|---|
| 顶部 | title_bar |
| 中部 | 分类栏 |
| 底部 | 新闻列表 |
(第5部分:list_item_one.xml )
一、单图布局整体作用
list_item_one.xml 用于展示:
单图新闻
在实际新闻 App 中,这种布局非常常见,例如:
- 普通资讯
- 推荐新闻
- 热点新闻
二、整体结构分析
2.1 布局结构图
RelativeLayout
├── LinearLayout(左侧内容)
│ ├── 标题
│ ├── 信息栏
├── ImageView(右侧图片)
2.2 UI效果
标题 + 信息 图片
左文右图布局
三、最外层 RelativeLayout 解析
3.1 代码
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="90dp"
android:padding="8dp">
3.2 为什么用 RelativeLayout?
原因:
需要实现左右布局(文字 + 图片)
3.3 高度固定的意义
android:layout_height="90dp"
优点:
- 列表高度统一
- 滑动更流畅
四、左侧内容区域(LinearLayout)
4.1 代码
<LinearLayout
android:orientation="vertical">
4.2 为什么用 LinearLayout?
因为:
标题在上,信息在下
4.3 内部结构
标题
↓
信息栏
五、标题 TextView 解析
5.1 代码
<TextView
android:maxLines="2"
android:textSize="16sp"/>
5.2 关键属性
(1)maxLines
android:maxLines="2"
(2)textSize
android:textSize="16sp"
(3)textColor
android:textColor="#3c3c3c"
六、信息栏区域解析(重点)
6.1 结构
RelativeLayout
├── iv_top(置顶图标)
├── LinearLayout(信息文本)
6.2 iv_top(置顶标识)
<ImageView
android:id="@+id/iv_top"
android:layout_alignParentBottom="true"/>
6.3 作用
用于显示:
“置顶新闻”
6.4 Adapter 中控制
if (position == 0)
第一条新闻显示该图标
6.5 信息文本区域
<LinearLayout
android:orientation="horizontal">
包含:
- 作者
- 评论
- 时间
6.6 样式复用(重点)
style="@style/tvInfo"
优势:
- 统一字体
- 减少代码
- 易维护
七、右侧图片 ImageView 解析
7.1 代码
<ImageView
android:id="@+id/iv_img"
android:layout_toRightOf="@id/ll_info"/>
7.2 关键属性
(1)layout_toRightOf
android:layout_toRightOf="@id/ll_info"
图片在右侧
(2)padding
android:padding="3dp"
图片与边缘留空
7.3 数据绑定
iv_img.setImageResource(...)
八、单图布局的逻辑实现(结合 Adapter)
8.1 数据来源
NewsBean.imgList
8.2 绑定逻辑
if (imgList.size() > 0)
设置图片
8.3 特殊情况(置顶)
position == 0 → 显示 iv_top
(第6部分:list_item_two.xml)
一、三图布局整体作用
list_item_two.xml 用于展示:
三图新闻
这种布局在新闻类 App 中非常常见,例如:
- 娱乐新闻
- 图片资讯
- 推荐内容
二、整体结构分析
2.1 布局结构图
RelativeLayout
├── 标题(TextView)
├── 图片区域(LinearLayout)
│ ├── ImageView
│ ├── ImageView
│ ├── ImageView
├── 信息栏(LinearLayout)
2.2 UI效果
标题
图片 图片 图片
作者 评论 时间
三、最外层 RelativeLayout 解析
3.1 代码
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
3.2 为什么用 RelativeLayout?
原因:
需要实现“上下结构 + 相对定位”
四、标题区域解析
4.1 代码
<TextView
android:id="@+id/tv_title"
android:maxLines="2"/>
4.2 特点
- 最上方
- 最重要信息
4.3 限制两行
android:maxLines="2"
防止 UI 撑高
五、三图区域解析(重点)
5.1 结构
<LinearLayout
android:orientation="horizontal">
5.2 为什么用 LinearLayout?
原因:
三张图片横向排列
5.3 图片控件
<ImageView style="@style/ivImg"/>
5.4 样式复用(重点)
style="@style/ivImg"
5.5 ivImg 样式作用
统一:
- 宽度
- 高度
- margin
六、信息栏解析
6.1 结构
<LinearLayout orientation="horizontal">
6.2 内容
- 作者
- 评论
- 时间
6.3 样式复用
style="@style/tvInfo"
七、布局层级分析(重要)
7. 层级结构
RelativeLayout(根)
├── 标题
├── LinearLayout(三图)
├── LinearLayout(信息)
八、Adapter 中的三图绑定逻辑(核心)
8.1 ViewHolder 类型
MyViewHolder2
8.2 绑定代码
iv_img1.setImageResource(...)
iv_img2.setImageResource(...)
iv_img3.setImageResource(...)
8.3 数据来源
NewsBean.imgList(3个元素)
8.4 数据结构设计
List<Integer> imgList;
关键思想:
数据决定UI
九、多图布局实现原理总结
9. 核心流程
type = 2
↓
加载 list_item_two.xml
↓
绑定3张图片
(第7部分:RecyclerView )
一、RecyclerView 概述
在 Android 开发中,RecyclerView 是用于展示列表数据的核心组件。
1.1 RecyclerView 的本质
高性能、可复用的列表控件
1.2 为什么要用 RecyclerView?
相比 ListView:
| 特性 | RecyclerView | ListView |
|---|---|---|
| 多布局支持 | 有 | 无 |
| 性能优化 | 有 | 一般 |
| 扩展性 | 强 | 弱 |
二、RecyclerView 核心组成
2.1 三大核心组件
RecyclerView = Adapter + ViewHolder + LayoutManager
1 Adapter(适配器)
作用:
绑定数据
2 ViewHolder(视图缓存)
作用:
缓存View,减少findViewById
3 LayoutManager(布局管理器)
作用:
控制排列方式
三、RecyclerView 工作流程(重点)
3.1 数据到界面的流程
数据 → Adapter → ViewHolder → RecyclerView → 屏幕
3.2 详细流程
步骤1:创建 ViewHolder
onCreateViewHolder()
步骤2:绑定数据
onBindViewHolder()
步骤3:显示到屏幕
3.3 滑动机制(关键)
当用户滑动时:
旧View → 回收 → 复用 → 新数据绑定
这就是:
Recycler(回收机制)
四、ViewHolder 机制详解
4.1 传统问题
在 ListView 中:
频繁 findViewById → 性能差
4.2 ViewHolder 解决方案
class MyViewHolder extends RecyclerView.ViewHolder
4.3 本项目中的实现
MyViewHolder1
MyViewHolder2
对应:
- 单图布局
- 三图布局
五、LayoutManager 深度解析
5.1 常见类型
| 类型 | 说明 |
|---|---|
| LinearLayoutManager | 线性列表 |
| GridLayoutManager | 网格 |
| StaggeredGridLayoutManager | 瀑布流 |
5.2 本项目使用
new LinearLayoutManager(this)
5.3 效果
竖直滚动列表
六、RecyclerView 复用机制(核心)
6.1 什么是复用?
不重复创建View,而是重复使用
6.2 复用流程
滑出屏幕 → 回收 → 进入缓存池 → 重新使用
七、多布局实现原理(重点)
7.1 核心方法
getItemViewType()
7.2 工作流程
返回type
↓
onCreateViewHolder根据type加载不同布局
7.3 本项目实现
return NewsList.get(position).getType();
type:
- 1 → 单图
- 2 → 三图
八、Adapter 生命周期
8.1 关键方法
| 方法 | 作用 |
|---|---|
| onCreateViewHolder | 创建View |
| onBindViewHolder | 绑定数据 |
| getItemCount | 返回数量 |
8.2 执行顺序
onCreate → onBind → 显示
九、性能优化机制
9.1 复用机制
减少创建对象
9.2 ViewHolder缓存
避免重复查找
9.3 局部刷新
notifyItemChanged()
十、RecyclerView 与 ListView 对比
| 特性 | RecyclerView | ListView |
|---|---|---|
| ViewHolder | 强制 | 可选 |
| 动画支持 | 强 | 弱 |
| 扩展性 | 高 | 低 |
十一、本项目中的 RecyclerView 应用
11.1 初始化
mRecyclerView = findViewById(...)
11.2 设置布局
setLayoutManager
11.3 设置适配器
setAdapter
11.4 数据展示
NewsBean → Adapter → UI
(第8部分:NewsAdapter )
一、Adapter 的核心作用回顾
在 RecyclerView 中,Adapter 的职责是:
连接 数据 与 UI
二、NewsAdapter 类结构解析
2.1 类定义
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
2.2 为什么使用 ViewHolder 泛型?
支持多布局(不同ViewHolder)
2.3 成员变量
private Context mContext;
private List<NewsBean> NewsList;
2.4 作用
| 变量 | 作用 |
|---|---|
| mContext | 上下文 |
| NewsList | 数据源 |
三、构造方法解析
3.1 代码
public NewsAdapter(Context context,List<NewsBean> NewsList)
3.2 作用
初始化:
- 上下文
- 数据
四、getItemViewType(多布局核心)
4.1 代码
return NewsList.get(position).getType();
4.2 作用
决定使用哪种布局
4.3 本项目逻辑
| type | 布局 |
|---|---|
| 1 | 单图 |
| 2 | 三图 |
4.4 执行流程
position → type → layout
五、onCreateViewHolder 详解(重点)
5.1 方法作用
创建ViewHolder
5.2 核心代码
if (viewType == 1){
inflate(list_item_one)
}else if (viewType == 2){
inflate(list_item_two)
}
5.3 LayoutInflater 解析
LayoutInflater.from(mContext).inflate(...)
作用:
XML → View对象
5.4 返回 ViewHolder
return holder;
5.5 关键思想
不同type → 不同布局
六、onBindViewHolder 逐行解析(核心)
6.1 方法作用
绑定数据
6.2 获取数据
NewsBean bean = NewsList.get(position);
6.3 单图布局绑定逻辑
1 判断类型
if (holder instanceof MyViewHolder1)
2 控制置顶显示
if (position == 0){
iv_top.setVisibility(View.VISIBLE);
}else{
iv_top.setVisibility(View.GONE);
}
实现:
第一条新闻显示“置顶”
3 设置文本
title.setText(...)
name.setText(...)
comment.setText(...)
time.setText(...)
4 设置图片
iv_img.setImageResource(...)
5 安全判断(重要)
if (bean.getImgList().size()==0) return;
防止:
空数据崩溃
6.4 三图布局绑定逻辑
1 判断类型
else if (holder instanceof MyViewHolder2)
2 设置文本
title.setText(...)
name.setText(...)
3 设置三张图片
iv_img1.setImageResource(...)
iv_img2.setImageResource(...)
iv_img3.setImageResource(...)
6.5 绑定流程总结
position → bean → 判断类型 → 绑定UI
七、getItemCount 解析
7.1 代码
return NewsList.size();
7.2 作用
告诉 RecyclerView:
有多少条数据
八、ViewHolder 类解析
8.1 单图 ViewHolder
class MyViewHolder1 extends RecyclerView.ViewHolder
成员
- iv_top
- iv_img
- title
- name
- comment
- time
8.2 三图 ViewHolder
class MyViewHolder2 extends RecyclerView.ViewHolder
成员
- iv_img1
- iv_img2
- iv_img3
九、Adapter 核心流程总结
getItemViewType()
↓
onCreateViewHolder()
↓
onBindViewHolder()
↓
显示数据
(第9部分:NewsBean 数据模型与数据驱动 UI 思想)
一、数据模型在项目中的作用
在 Android 开发中,数据模型(Model)用于:
封装业务数据
在本项目中,对应的类是:
NewsBean
二、NewsBean 类结构解析
2.1 类定义
public class NewsBean {
2.2 成员变量
private int id;
private String title;
private List<Integer> imgList;
private String name;
private String comment;
private String time;
private int type;
2.3 字段作用详解
1 id(新闻ID)
唯一标识一条新闻
2 title(标题)
新闻核心内容
在 UI 中对应:
tv_title
3 imgList(图片列表)
存储图片资源ID集合
4 name(作者)
新闻来源
5 comment(评论数)
用户互动信息
6 time(发布时间)
时间信息
7 type(类型,核心)
决定UI布局
2.4 Getter / Setter
作用
提供访问接口
示例
public String getTitle() {
return title;
}
符合:
JavaBean 规范
三、数据驱动 UI 思想(重点)
3.1 什么是数据驱动 UI?
界面由数据决定,而不是写死
3.2 本项目体现
1 type 决定布局
type = 1 → 单图
type = 2 → 三图
2 imgList 决定图片
imgList.size → 图片数量
3 title/name 等决定内容
数据 → 文本显示
3.3 数据流过程
NewsBean → Adapter → ViewHolder → UI
四、MainActivity 中 setData() 解析
4.1 方法作用
构造模拟数据
4.2 核心代码
NewsList = new ArrayList<>();
4.3 循环构造数据
for (int i = 0; i < titles.length; i++)
4.4 创建对象
NewsBean bean = new NewsBean();
4.5 设置数据
bean.setTitle(titles[i]);
bean.setName(names[i]);
4.6 设置类型
bean.setType(types[i]);
关键:
type 控制布局
五、图片数据构造逻辑(重点)
5.1 switch 结构
switch (i)
5.2 示例分析
case 0
imgList0 = new ArrayList<>();
无图片(置顶)
case 1
imgList1.add(icons1[i - 1]);
单图
case 2
imgList2.add(...)
imgList2.add(...)
imgList2.add(...)
三图
六、数据与 UI 的映射关系
| 数据字段 | UI 控件 |
|---|---|
| title | tv_title |
| name | tv_name |
| comment | tv_comment |
| time | tv_time |
| imgList | ImageView |
| type | 布局 |
(第10部分:项目总结)
一、项目整体回顾
通过前九个部分,我们已经完整分析了一个“仿今日头条”项目,涵盖:
- 资源体系
- 布局设计
- RecyclerView 原理
- Adapter 实现
- 数据模型设计
1.1 项目核心结构总结
MainActivity(控制层)
↓
NewsAdapter(桥梁)
↓
RecyclerView(展示)
↓
ViewHolder(缓存)
↓
XML布局(UI)
↓
NewsBean(数据)
1.2 核心思想总结
整个项目围绕一个核心展开:
数据驱动 UI
二、项目核心技术总结
2.1 RecyclerView
- 高性能列表控件
- 支持 View 复用
- 支持多布局
2.2 Adapter 机制
数据 → UI 的桥梁
2.3 多布局实现
type → 控制布局
2.4 ViewHolder
缓存View,提高性能
2.5 布局设计
- LinearLayout(线性)
- RelativeLayout(相对)
三、项目总结
1 多布局 RecyclerView
实现:
- 单图新闻
- 三图新闻
接近真实 App
2 数据驱动 UI
数据决定界面,而不是写死
3 模块化设计
- title_bar 独立
- item 布局拆分
4 样式复用
style="@style/tvInfo"
5 性能优化
- ViewHolder
- RecyclerView复用
这个项目的本质 = RecyclerView + 多布局 + 数据驱动UI