Skip to content

快照管理页批量删除支持自动快照,单卡删除保留滚动位置并修复瀑布流列归属 - #1076

Merged
SoxiaLiSA merged 1 commit into
CeuiLiSA:classicfrom
wangwang-code:patch-8-31
Aug 31, 2026
Merged

快照管理页批量删除支持自动快照,单卡删除保留滚动位置并修复瀑布流列归属#1076
SoxiaLiSA merged 1 commit into
CeuiLiSA:classicfrom
wangwang-code:patch-8-31

Conversation

@wangwang-code

Copy link
Copy Markdown
Contributor

快照管理页批量删除支持自动快照,单卡删除保留滚动位置并修复瀑布流列归属

分支:patch-8-31(wangwang-code fork)
目标:classic
最新提交:e297880e

背景

快照管理页的多选态此前只有“批量导出”一种语义:自动快照不可导出,因此在多选态中统一隐匿自动快照的勾选框、不允许选中。

但“批量删除”复用了这套导出多选态,导致自动快照也无法参与批量删除——即使自动快照本身支持单张删除,用户也只能一张张删。

另外,单卡删除时页面会 reload(resetScroll = true),每次删除都清空列表并回顶;改成保留滚动位置后,又暴露出 StaggeredGridLayoutManager 的 span 缓存问题:逐个删到最后一张时,最后一张可能仍停留在右列,不会自动换到左列。

改动内容

1. 批量删除多选态允许自动快照

  • SnapshotListFragment 新增 includeAuto 选择态开关:
    • 批量导出:includeAuto = false,自动快照仍不显示勾选框、不可选中;
    • 批量删除:includeAuto = true,自动快照显示勾选框,可参与批量删除。
  • SnapshotAdapter 增加 selectionIncludesAutotoggleSelection / selectAll / isAllSelected 统一按“是否可勾选”判断。
  • 新增 selectedCards() 返回正式 + 自动快照的选中卡片;批量删除改用该方法。
  • 批量删除执行时按 isAuto 分别走 AutoSnapshotRepository.deleteAuto / SnapshotRepository.delete

2. 单卡删除不再回顶

  • 单卡删除后由 reload(resetScroll = true) 改为 reload(reflow = true)
    • 不再先 submitList(null) 清空列表,保留当前滚动位置;
    • 行为与浏览历史页“就地摘条、不回顶”的体验对齐。

3. 删除后重新分配 StaggeredGrid span

  • reload 新增 reflow 参数。
  • reflow = true 时使用 ListAdapter.submitList(list, commitCallback),在 diff 真正提交后调用:
(snapshotList.layoutManager as? StaggeredGridLayoutManager)
    ?.invalidateSpanAssignments()
  • 这样会清空 StaggeredGridLayoutManager 的 span 缓存并重新布局,避免最后一张卡停在右列;同时不会清空列表、不会回顶。
  • commit 回调中校验 _binding?.snapshotList === snapshotList,防止 view 重建后操作旧 RecyclerView。

涉及文件

  • app/src/main/java/ceui/pixiv/snapshot/SnapshotListFragment.kt
  • app/src/main/java/ceui/pixiv/snapshot/SnapshotManagerFragment.kt

提交

  • e297880e fix(snapshot): 批量删除支持自动快照,单卡删除保留滚动并重排瀑布流列

@SoxiaLiSA
SoxiaLiSA merged commit 1940c3f into CeuiLiSA:classic Aug 31, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants