210 lines
8.0 KiB
Plaintext
210 lines
8.0 KiB
Plaintext
# 广场页面业务功能和代码逻辑分析报告
|
||
|
||
## 1. 页面概述
|
||
|
||
**文件位置**: `app/src/main/java/com/xunpaisoft/social/im/main/DiscoveryFragment.java`
|
||
**页面类型**: Fragment
|
||
**主要功能**: 社交广场页面,类似朋友圈功能,支持发布动态、浏览动态、点赞评论等社交功能
|
||
|
||
## 2. 核心业务功能
|
||
|
||
### 2.1 页面切换功能
|
||
- **广场/关注切换**: 通过 `tv_guangchang` 和 `tv_guanzhu` 两个Tab切换
|
||
- **状态管理**: 使用 `mIsClickGuangchang` 布尔变量控制当前显示模式
|
||
- **视觉反馈**: 通过 `refreshView()` 方法更新底部线条样式
|
||
|
||
### 2.2 动态发布功能
|
||
- **发布入口**: 点击 `tv_publish` 按钮跳转到 `PublishActivity`
|
||
- **发布类型**: 支持文字、图片等多媒体内容发布
|
||
|
||
### 2.3 动态浏览功能
|
||
- **列表展示**: 使用 `RecyclerView` + `SmartRefreshLayout` 实现下拉刷新和上拉加载
|
||
- **分页加载**: 通过 `mPage` 变量控制分页,每页加载 `AppService.PAGE_MAX_NUMBER` 条数据
|
||
- **数据源**: 调用 `AppService.Instance().publishList()` 接口获取动态数据
|
||
|
||
### 2.4 社交互动功能
|
||
- **点赞功能**:
|
||
- 点击 `tv_ada_like` 触发点赞/取消点赞
|
||
- 调用 `likeDeal()` 方法处理点赞逻辑
|
||
- 实时更新点赞状态和数量显示
|
||
- **评论功能**:
|
||
- 点击 `tv_ada_commit` 打开评论对话框
|
||
- 通过 `CommentDialog` 实现评论输入
|
||
- 调用 `submitComment()` 方法提交评论
|
||
- **删除功能**:
|
||
- 仅自己的动态显示删除按钮
|
||
- 通过 `CommDialog` 确认删除操作
|
||
- 调用 `deleteSelfPyq()` 方法删除动态
|
||
|
||
### 2.5 用户交互功能
|
||
- **用户信息查看**: 点击头像或昵称跳转到 `UserInfoActivity`
|
||
- **动态详情**: 点击 `tv_ada_detal` 跳转到 `PengyouquanDetailActivity`
|
||
- **图片预览**: 点击动态图片使用 `MMPreviewActivity` 预览
|
||
|
||
## 3. 技术架构分析
|
||
|
||
### 3.1 布局结构
|
||
```java
|
||
// 主要UI组件
|
||
OptionItemView momentOptionItemView; // 朋友圈入口
|
||
OptionItemView conferenceOptionItemView; // 会议入口
|
||
RecyclerView mRcyItem; // 动态列表
|
||
TextView mTVPublish; // 发布按钮
|
||
TextView tvGuangchang; // 广场Tab
|
||
TextView tvGuanzhu; // 关注Tab
|
||
SmartRefreshLayout swipeRefreshLayout; // 刷新布局
|
||
```
|
||
|
||
### 3.2 数据管理
|
||
- **适配器**: 使用自定义 `BaseRcyAdapter` 管理列表数据
|
||
- **数据模型**: `GetPengyouquanResult.ListBean` 作为动态数据模型
|
||
- **状态管理**: 通过 `mPage` 和 `mIsClickGuangchang` 管理页面状态
|
||
|
||
### 3.3 网络请求
|
||
- **接口调用**: 通过 `AppService.Instance()` 调用各种API
|
||
- **回调处理**: 使用 `SimpleCallback` 和 `BooleanCallback` 处理网络响应
|
||
- **错误处理**: 统一的错误提示和异常处理机制
|
||
|
||
## 4. 关键代码逻辑分析
|
||
|
||
### 4.1 页面初始化流程
|
||
```java
|
||
onCreateView() -> bindViews() -> bindEvents() -> initMoment() -> getPublish()
|
||
```
|
||
|
||
### 4.2 动态列表渲染逻辑
|
||
```java
|
||
initRcyItem() -> BaseRcyAdapter.bindView() -> 数据绑定 -> 事件监听设置
|
||
```
|
||
|
||
### 4.3 刷新和加载逻辑
|
||
```java
|
||
OnRefreshListener -> mPage = 1 -> getPublish() -> 更新列表
|
||
OnLoadMoreListener -> mPage++ -> getPublish() -> 追加数据
|
||
```
|
||
|
||
### 4.4 图片展示逻辑
|
||
```java
|
||
itemPicInfo() -> 解析图片URL -> 根据数量选择布局 -> GridLayoutManager/LinearLayoutManager
|
||
```
|
||
|
||
## 5. 数据流向分析
|
||
|
||
### 5.1 数据获取流程
|
||
1. 用户操作触发 → 2. 构建请求参数 → 3. 调用API接口 → 4. 处理响应数据 → 5. 更新UI显示
|
||
|
||
### 5.2 状态更新流程
|
||
1. 用户交互 → 2. 本地状态更新 → 3. 网络请求 → 4. 服务器响应 → 5. UI刷新
|
||
|
||
## 6. 关键方法详解
|
||
|
||
### 6.1 数据获取方法
|
||
- **getPublish()**: 获取动态列表数据
|
||
- **submitComment()**: 提交评论
|
||
- **likeDeal()**: 处理点赞逻辑
|
||
- **deleteSelfPyq()**: 删除自己的动态
|
||
|
||
### 6.2 UI更新方法
|
||
- **refreshView()**: 更新Tab状态显示
|
||
- **initRcyItem()**: 初始化列表适配器
|
||
- **itemPicInfo()**: 处理图片展示
|
||
|
||
### 6.3 事件处理方法
|
||
- **clickGuangchang()**: 切换到广场模式
|
||
- **clickGuanzhu()**: 切换到关注模式
|
||
- **publish()**: 跳转到发布页面
|
||
|
||
## 7. 技术特点
|
||
|
||
### 7.1 优点
|
||
- **模块化设计**: 功能模块清晰分离
|
||
- **用户体验**: 支持下拉刷新和上拉加载
|
||
- **交互丰富**: 点赞、评论、删除等社交功能完整
|
||
- **图片处理**: 支持多图片展示和预览
|
||
- **状态管理**: 良好的页面状态控制
|
||
|
||
### 7.2 可优化点
|
||
- **代码复用**: 部分重复代码可以提取为公共方法
|
||
- **错误处理**: 可以增加更详细的错误处理机制
|
||
- **性能优化**: 图片加载可以增加缓存机制
|
||
- **代码规范**: 部分方法可以进一步拆分
|
||
|
||
## 8. 依赖关系
|
||
|
||
### 8.1 内部依赖
|
||
- `AppService`: 网络请求服务
|
||
- `BaseRcyAdapter`: 列表适配器基类
|
||
- `CommDialog`: 通用对话框
|
||
- `CommentDialog`: 评论对话框
|
||
|
||
### 8.2 外部依赖
|
||
- `SmartRefreshLayout`: 下拉刷新库
|
||
- `GlideUtils`: 图片加载工具
|
||
- `ToastUtils`: 提示工具
|
||
- `DateUtils`: 时间处理工具
|
||
|
||
## 9. 业务规则
|
||
|
||
### 9.1 权限控制
|
||
- 只有自己的动态才能删除
|
||
- 根据用户ID判断操作权限
|
||
|
||
### 9.2 数据展示规则
|
||
- 评论超过3条时显示"查看详情"
|
||
- 根据图片数量选择不同的布局方式
|
||
- 点赞状态实时更新
|
||
|
||
### 9.3 交互规则
|
||
- 点击头像或昵称查看用户信息
|
||
- 点击图片可以预览大图
|
||
- 支持长按等手势操作
|
||
|
||
## 10. 总结
|
||
|
||
广场页面是一个功能完整的社交动态展示页面,集成了发布、浏览、互动等核心社交功能。代码结构清晰,功能模块化程度较高,用户体验良好。通过RecyclerView实现了高效的列表展示,通过SmartRefreshLayout实现了流畅的刷新体验,整体技术实现较为成熟。
|
||
|
||
主要业务价值:
|
||
- 提供社交内容展示平台
|
||
- 支持用户互动和内容管理
|
||
- 实现社交网络的核心功能
|
||
- 为用户提供良好的社交体验
|
||
|
||
|
||
## 11. 新增:回复评论功能(广场页与详情页)
|
||
|
||
### 11.1 功能说明
|
||
- 评论与回复评论共用同一接口 `/api/post/comment`
|
||
- 参数
|
||
- post_id: 帖子ID(必填)
|
||
- content: 评论内容(必填)
|
||
- comment_id: 父评论ID(回复评论必填;普通评论不传)
|
||
- 展示规则
|
||
- 若为回复评论,名称区显示为“nickname 回复 receiver: 内容”
|
||
- 若为普通评论,名称区显示为“nickname: 内容”
|
||
|
||
### 11.2 交互流程(DiscoveryFragment - 广场页)
|
||
- 点击某条评论 → 弹出输入框 → 输入后发送
|
||
- 调用方法:`submitComment(postId, parentCommentId, content, callback)`
|
||
- 成功后:`mPage = 1; getPublish();` 列表整体刷新,评论区按上述规则渲染
|
||
- 代码位置:
|
||
- 评论区适配与点击回复:`initRcyCommentView(..., postId)`
|
||
- 接口封装:`submitComment(String postId, String parentCommentId, String content, BooleanCallback callback)`
|
||
|
||
### 11.3 交互流程(PengyouquanDetailActivity - 详情页)
|
||
- 点击评论项 → 弹出输入框 → 输入后发送
|
||
- 调用方法:`submitComment(postId, parentCommentId, content, callback)`(新增重载)
|
||
- 成功后:`mPage = 1; publishCommentList(postId, mPage);` 局部刷新评论列表与评论计数
|
||
- 代码位置:
|
||
- 评论区适配与点击回复:`initCommentRecyclerView()` 的 `bindView()` 中
|
||
- 接口封装:`submitComment(String postId, String parentCommentId, String content, BooleanCallback callback)`(新增)
|
||
|
||
### 11.4 展示实现细节
|
||
- 名称区“回复”格式兼容不同字段:优先尝试 `receiver`,否则回退 `receiver_name` / `receiverNickname`(通过反射尝试获取)
|
||
- 输入框提示:默认显示“回复 nickname”
|
||
- 刷新逻辑:复用原评论成功后的刷新路径,保持行为一致
|
||
|
||
### 11.5 验证要点
|
||
- 普通评论:仅 post_id + content → 成功后刷新,按“nickname: 内容”展示
|
||
- 回复评论:post_id + content + comment_id → 成功后刷新,按“nickname 回复 receiver: 内容”展示
|
||
- 评论数、评论区显隐与原有逻辑一致
|