AGENTS.md
30d8238
根因在 android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:137-140:
android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:137-140
override fun onResume() { super.onResume() load() // 无条件重新拉取并渲染列表 }
每次回到前台都会执行 load(),把列表重新渲染进 resultColumn,覆盖掉原本显示的详情内容。
load()
resultColumn
结构上的成因:
removeAllViews()
addView
renderDetail
:428
selectedStatus
page
total
pageSignature
:93-98
onResume
与 #128 的关系:#128 通过 AgentTabSelectionPolicy 与 MainActivity 的 savedInstanceState 保住了选中的 Tab(MainActivity.kt:21/34/60/93),属于 Activity 层级;本缺陷位于 Fragment 内部的视图状态,是不同层级,#128 未覆盖。当前表现为:切回后仍停在「采集」Tab,但 Tab 内退回了列表。
AgentTabSelectionPolicy
MainActivity
savedInstanceState
MainActivity.kt:21/34/60/93
TaskHistoryFragment
detailTaskId: Long?
loadCollectionDetail()
loadPurchaseDetail()
currentPageReceiver
:100-108
onResume()
onSaveInstanceState
onCreate(savedInstanceState)
requestGeneration
showError
cd android && .\gradlew.bat :app:testDebugUnitTest :app:assembleDebug
TaskHistoryFragment.kt
Architecture-and-Code-Map
待实施。
已完成 #134 并推送到 main。
main
.\gradlew.bat :app:testDebugUnitTest :app:assembleDebug
4862d48 fix(#134): preserve task detail on app switch
工单保持打开,状态为待验收。
用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
No dependencies set.
The note is not visible to the blocked user.
所属与来源
AGENTS.md「Gitea 交互与工单最小读取」记录回退原因。当前事实与根因(提交
30d8238复核)根因在
android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:137-140:每次回到前台都会执行
load(),把列表重新渲染进resultColumn,覆盖掉原本显示的详情内容。结构上的成因:
resultColumn,通过removeAllViews()+ 重新addView切换(见renderDetail,:428)。这不是 Fragment 回退栈,也没有导航层级,「进入详情」只是在同一容器内换了一批 View。selectedStatus、page、total、pageSignature(:93-98),没有任何变量记录「当前正在查看详情 #N」。因此onResume即使想恢复也无从判断,只能走默认的列表路径。与 #128 的关系:#128 通过
AgentTabSelectionPolicy与MainActivity的savedInstanceState保住了选中的 Tab(MainActivity.kt:21/34/60/93),属于 Activity 层级;本缺陷位于 Fragment 内部的视图状态,是不同层级,#128 未覆盖。当前表现为:切回后仍停在「采集」Tab,但 Tab 内退回了列表。目标
非目标
实施方案
TaskHistoryFragment新增状态变量,记录当前是否处于详情视图及其任务号(例如detailTaskId: Long?,为空表示列表视图)。loadCollectionDetail()/loadPurchaseDetail()进入详情时置位;renderDetail中「返回采集记录 / 返回采购记录」按钮点击、以及load()返回列表时清除;currentPageReceiver,:100-108)按其实际渲染结果同步维护该变量。onResume()改为按该变量分支:非空则重新加载对应详情,为空则维持现有的load()。onSaveInstanceState/onCreate(savedInstanceState)持久化该变量,使进程被系统回收后重建仍能恢复详情;与 #128 的 Tab 恢复方式保持一致的写法。requestGeneration机制,避免恢复详情与其他请求竞态导致渲染错乱。showError处理,并清除状态变量退回列表,不得反复重试或卡在空白页。安全边界
验收标准
验证方式
cd android && .\gradlew.bat :app:testDebugUnitTest :app:assembleDebug依赖、并行与风险
TaskHistoryFragment.kt,两者同时进行会产生冲突。必须在 #130 开工前完成。requestGeneration竞态保护;该请求频次与原先每次回前台拉取列表相当,不额外增加负担。文档影响
Architecture-and-Code-Map。状态
待实施。
实施完成,待验收
已完成 #134 并推送到
main。TaskHistoryFragment记录当前详情任务号;进入详情/返回列表/当前页采集广播均沿用同一状态。load()覆盖。onSaveInstanceState恢复进程重建前的详情任务号;详情请求失败或凭据缺失时清除状态,避免循环恢复。requestGeneration竞态保护;未改变筛选、分页、重新采集、采购重试和 #128 Tab 保持。.\gradlew.bat :app:testDebugUnitTest :app:assembleDebug,通过。4862d48 fix(#134): preserve task detail on app switch,已推送。工单保持打开,状态为待验收。
用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。