zhibo/.kiro/specs/android-hot-tab/tasks.md

5.9 KiB
Raw Blame History

Implementation Plan

  • 1. 修改布局文件添加"热门"Tab

  • 1.1 在activity_main.xml的categoryTabs中添加"热门"TabItem放在最左侧

    • 在categoryTabs的第一个位置添加TabItem文本为"热门"
    • 确保"热门"Tab在"推荐"Tab之前
    • Requirements: 1.1, 1.2, 1.4
  • 1.2 在item_works.xml中添加热门标识ImageView

    • 添加id为hotBadge的ImageView
    • 设置火焰图标ic_fire_24
    • 设置橙红色tint#FF4500
    • 默认visibility为gone
    • Requirements: 3.1
  • 2. 修改WorksResponse数据模型

  • 2.1 在WorksResponse类中添加isHot和hotTime字段

    • 添加Boolean类型的isHot字段
    • 添加String类型的hotTime字段
    • 添加对应的getter和setter方法
    • Requirements: 2.2, 3.1
  • 3. 修改WorksAdapter显示热门标识

  • 3.1 在WorksViewHolder的bind方法中添加热门标识显示逻辑

    • 获取hotBadge视图
    • 根据works.getIsHot()判断是否显示
    • isHot为true时设置visibility为VISIBLE
    • isHot为false或null时设置visibility为GONE
    • Requirements: 3.1
  • * 3.2 编写Property测试热门作品显示热门标识

    • Property 2: 热门作品显示热门标识
    • Validates: Requirements 3.1
  • 4. 在MainActivity中添加热门作品数据管理

  • 4.1 添加热门作品相关成员变量

    • 添加hotWorks列表List
    • 添加currentHotWorksPageint初始值1
    • 添加isLoadingHotWorksboolean初始值false
    • 添加hasMoreHotWorksboolean初始值true
    • Requirements: 2.1, 5.1
  • 4.2 实现loadHotWorks方法

    • 检查isLoadingHotWorks避免重复请求
    • 调用ApiService.getHotWorks(page, 20)
    • 处理成功响应更新hotWorks列表更新hasMoreHotWorks标志
    • 处理失败响应:显示错误提示
    • 更新isLoadingHotWorks状态
    • Requirements: 2.1, 2.2, 2.4, 2.5
  • 4.3 实现refreshHotWorks方法

    • 重置currentHotWorksPage为1
    • 重置hasMoreHotWorks为true
    • 调用loadHotWorks(1)
    • Requirements: 4.1, 4.3
  • 4.4 实现loadMoreHotWorks方法

    • 检查isLoadingHotWorks和hasMoreHotWorks
    • 增加currentHotWorksPage
    • 调用loadHotWorks(currentHotWorksPage)
    • Requirements: 5.1, 5.3
  • 4.5 实现updateHotWorksUI方法

    • 检查hotWorks是否为空
    • 为空时显示空状态视图
    • 不为空时转换为FeedItem列表并更新adapter
    • Requirements: 2.2, 2.6
  • * 4.6 编写Property测试热门Tab仅显示作品内容

    • Property 1: 热门Tab仅显示作品内容
    • Validates: Requirements 2.3
  • 5. 修改categoryTabs的Tab选择监听器

  • 5.1 修改onTabSelected方法处理"热门"Tab

    • 获取选中Tab的文本
    • 判断是否为"热门"
    • 如果是"热门"调用refreshHotWorks()
    • 如果是其他分类调用applyCategoryFilterWithAnimation()
    • Requirements: 1.3, 2.1, 4.1
  • 5.2 修改onTabReselected方法处理"热门"Tab

    • 判断是否为"热门"
    • 如果是"热门"调用refreshHotWorks()刷新数据
    • Requirements: 4.1
  • 6. 修改下拉刷新逻辑

  • 6.1 在SwipeRefreshLayout的OnRefreshListener中添加"热门"Tab判断

    • 检查currentCategory是否为"热门"
    • 如果是"热门"调用refreshHotWorks()
    • 如果不是调用fetchDiscoverRooms()
    • Requirements: 4.1, 4.2, 4.3
  • 7. 修改滚动加载更多逻辑

  • 7.1 在RecyclerView的OnScrollListener中添加"热门"Tab判断

    • 检查是否滚动到底部lastVisible >= total - 4
    • 检查currentCategory是否为"热门"
    • 如果是"热门"调用loadMoreHotWorks()
    • Requirements: 5.1, 5.2
  • [-] 8. 实现Tab切换时的状态保存和恢复

  • 8.1 添加Tab切换时间记录

    • 添加lastHotTabLeaveTime成员变量long
    • 在切换离开"热门"Tab时记录当前时间
    • Requirements: 6.1, 6.3
  • 8.2 实现返回"热门"Tab时的状态恢复

    • 检查是否有已加载的数据
    • 如果有数据且停留时间小于5分钟恢复数据和滚动位置
    • 如果停留时间超过5分钟调用refreshHotWorks()
    • Requirements: 6.2, 6.3
  • 9. 添加错误处理和空状态显示

  • 9.1 实现showErrorState方法

    • 显示错误提示视图
    • 提供重试按钮
    • 重试按钮点击时调用refreshHotWorks()
    • Requirements: 2.5, 4.4, 5.4
  • 9.2 实现showEmptyState方法

    • 显示空状态视图
    • 显示"暂无热门作品"文本
    • 提供刷新按钮
    • Requirements: 2.6
  • 10. 设置默认选中"热门"Tab

  • 10.1 在showDiscoverTab方法中设置默认选中

    • 在categoryTabs初始化完成后
    • 获取索引为0的Tab"热门"Tab
    • 调用tab.select()选中该Tab
    • 触发loadHotWorks加载数据
    • Requirements: 1.3
  • * 11. 编写单元测试

  • * 11.1 测试"热门"Tab位置和顺序

    • 测试categoryTabs包含6个Tab
    • 测试"热门"Tab在索引0位置
    • 测试"推荐"Tab在索引1位置
    • Requirements: 1.1, 1.2, 1.4
  • * 11.2 测试热门作品加载逻辑

    • 测试loadHotWorks调用正确的API
    • 测试refreshHotWorks重置页码
    • 测试loadMoreHotWorks增加页码
    • 测试空数据显示空状态
    • 测试错误显示错误提示
    • Requirements: 2.1, 2.4, 2.5, 2.6, 4.1, 5.1
  • * 11.3 测试WorksAdapter热门标识显示

    • 测试isHot=true时hotBadge可见
    • 测试isHot=false时hotBadge不可见
    • Requirements: 3.1
  • * 11.4 测试下拉刷新和加载更多

    • 测试下拉刷新触发refreshHotWorks
    • 测试滚动到底部触发loadMoreHotWorks
    • 测试刷新动画显示和隐藏
    • Requirements: 4.1, 4.2, 4.3, 5.1, 5.2
  • * 11.5 测试Tab切换状态保存

    • 测试切换Tab后数据保留
    • 测试返回Tab后数据恢复
    • 测试超过5分钟自动刷新
    • Requirements: 6.1, 6.2, 6.3
  • 12. Checkpoint - 确保所有测试通过

    • Ensure all tests pass, ask the user if questions arise.