fix: 任务操作后的交互优化(消除黑屏闪烁)
1. 操作成功后先显示弹窗 2 秒,弹窗消失后再刷新(不再立即刷新导致黑屏) 2. 刷新时不显示 loading(保持当前内容,静默更新) 3. 列表全部完成后显示"全部完成"弹窗 1.5 秒,再返回首页 之前:完成→黑屏loading→突然跳到下一个/回首页 现在:完成→弹窗"任务已完成"→平滑切到下一个/弹窗"全部完成"→回首页 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -130,7 +130,8 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
|
||||
/** 第一步:获取任务 ID 列表 */
|
||||
private fun fetchTaskIds() {
|
||||
showLoading()
|
||||
// 已操作过的刷新不显示 loading(保持当前内容,避免黑屏)
|
||||
if (!hasActioned) showLoading()
|
||||
|
||||
// 通知跳转:有 taskIds 时不走 queryTaskIds,直接按 ID 构建列表
|
||||
val ids = filterTaskIds
|
||||
@@ -159,8 +160,14 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
if (taskIndex >= taskList.size) taskIndex = taskList.size - 1
|
||||
fetchCurrentDetail()
|
||||
} else if (hasActioned) {
|
||||
// 操作后列表为空 → 自动返回上一页
|
||||
findNavController().popBackStack()
|
||||
// 操作后列表为空 → 显示"全部完成"后返回首页
|
||||
tipDialog.show(
|
||||
status = QuTipDialog.Status.SUCCESS,
|
||||
title = "全部完成"
|
||||
)
|
||||
binding.root.postDelayed({
|
||||
if (isAdded && view != null) findNavController().popBackStack()
|
||||
}, 1500)
|
||||
} else {
|
||||
showEmpty()
|
||||
}
|
||||
@@ -920,19 +927,23 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
when (result) {
|
||||
is ApiResult.Success -> {
|
||||
Timber.d("任务操作: $successMsg")
|
||||
hasActioned = true // 标记已操作,列表为空时自动返回
|
||||
// 完成任务后,通知模式下从 ID 列表中移除(避免已完成任务仍显示)
|
||||
hasActioned = true
|
||||
// 完成任务后,通知模式下从 ID 列表中移除
|
||||
if (action == "complete" && filterTaskIds != null) {
|
||||
val currentId = taskList.getOrNull(taskIndex)?.id ?: 0L
|
||||
filterTaskIds = filterTaskIds!!.filter { it != currentId }.toLongArray()
|
||||
}
|
||||
// 先显示成功弹窗,等弹窗消失后再刷新(避免黑屏闪烁)
|
||||
tipDialog.show(
|
||||
status = QuTipDialog.Status.SUCCESS,
|
||||
title = successMsg,
|
||||
back = true, step = 0, countdown = 2
|
||||
back = false, step = 0, countdown = 0
|
||||
)
|
||||
// 操作成功后刷新:重新获取列表和详情
|
||||
fetchTaskIds()
|
||||
// 2 秒后刷新
|
||||
binding.root.postDelayed({
|
||||
if (!isAdded || view == null) return@postDelayed
|
||||
fetchTaskIds()
|
||||
}, 2000)
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
tipDialog.show(
|
||||
|
||||
Reference in New Issue
Block a user