From a8d125ef9d29adfe5ae7e2b235ed4431568b9d76 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Thu, 15 Jan 2026 17:23:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BD=E9=99=85=E5=87=BA=E6=B8=AF=20?= =?UTF-8?q?=E5=87=BA=E6=B8=AF=E4=BB=93=E5=BA=93=20=E6=B8=85=E4=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vfox.toml | 2 ++ .vfox/sdks/java | 1 + .../gjc/activity/IntExpStorageUseActivity.kt | 5 ++--- .../holder/IntExpStorageUseSubViewHolder.kt | 20 +++++++++---------- .../gjc/holder/IntExpTallyViewHolder.kt | 14 +++++++++++-- .../gjc/viewModel/IntExpTallyViewModel.kt | 13 ++++++++++-- 6 files changed, 38 insertions(+), 17 deletions(-) create mode 100644 .vfox.toml create mode 120000 .vfox/sdks/java diff --git a/.vfox.toml b/.vfox.toml new file mode 100644 index 0000000..9dbc9e4 --- /dev/null +++ b/.vfox.toml @@ -0,0 +1,2 @@ +[tools] +java = "17.0.16+8-amzn" diff --git a/.vfox/sdks/java b/.vfox/sdks/java new file mode 120000 index 0000000..d309154 --- /dev/null +++ b/.vfox/sdks/java @@ -0,0 +1 @@ +/Users/kid/.version-fox/cache/java/v-17.0.16+8-amzn/java-17.0.16+8-amzn \ No newline at end of file diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpStorageUseActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpStorageUseActivity.kt index 14628f1..15d2c56 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpStorageUseActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpStorageUseActivity.kt @@ -63,12 +63,11 @@ class IntExpStorageUseActivity : val selectedStorageList = maWb.storageUseList?.filter { it.isSelected } ?: emptyList() // 只添加有选中子列表项的主列表项 - if (selectedStorageList.isNotEmpty()) { + if (selectedStorageList.isNotEmpty() || maWb.isSelected) { // 创建主列表项的副本,只包含选中的子列表 maWb.copy(storageUseList = selectedStorageList) } else { -// null - maWb + null } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpStorageUseSubViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpStorageUseSubViewHolder.kt index c735855..97ceef6 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpStorageUseSubViewHolder.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpStorageUseSubViewHolder.kt @@ -26,26 +26,26 @@ class IntExpStorageUseSubViewHolder(view: View) : bean.checked.set(newCheckedState) binding.executePendingBindings() - // 反向联动主列表项 - updateParentCheckState() + // 反向联动主列表项(仅在勾选时联动) + updateParentCheckState(newCheckedState) } } /** * 更新父列表项的选择状态 * 规则: - * - 如果有任何一个子列表项被勾选,则主列表项也应该被勾选 - * - 如果所有子列表项都未勾选,则主列表项也应该取消勾选 + * - 如果子项被勾选(newCheckedState = true),则自动勾选父项 + * - 如果子项被取消勾选(newCheckedState = false),则不改变父项状态 */ - private fun updateParentCheckState() { + private fun updateParentCheckState(newCheckedState: Boolean) { // 从RecyclerView的tag获取父Bean引用 val recyclerView = itemView.parent as? RecyclerView ?: return val parentBean = recyclerView.tag as? GjcMaWb ?: return - // 检查是否有任何一个子列表项被勾选 - val hasAnyChecked = parentBean.storageUseList?.any { it.checked.get() } ?: false - - // 更新父列表项的选择状态 - parentBean.checked.set(hasAnyChecked) + // 只有当子项被勾选时,才联动勾选父项 + if (newCheckedState) { + parentBean.checked.set(true) + } + // 当子项被取消勾选时,不影响父项状态 } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallyViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallyViewHolder.kt index 60f7324..661c87f 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallyViewHolder.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallyViewHolder.kt @@ -20,10 +20,20 @@ class IntExpTallyViewHolder(view: View) : binding.position = position binding.executePendingBindings() - // 图标点击切换选择状态(保留原有) + // 图标点击切换选择状态(单向同步到子列表) binding.ivIcon.setOnClickListener { - bean.checked.set(!bean.checked.get()) + // 切换主列表项的选择状态 + val newCheckedState = !bean.checked.get() + bean.checked.set(newCheckedState) + + // 单向同步:主列表选择状态同步到所有子列表项 + bean.haWbList?.forEach { haWb -> + haWb.checked.set(newCheckedState) + } + + // 刷新UI binding.executePendingBindings() + binding.rvSub.adapter?.notifyDataSetChanged() } // ========== 新增:展开按钮点击事件 ========== diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt index 1d4af55..278852b 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt @@ -71,14 +71,23 @@ class IntExpTallyViewModel : BasePageViewModel() { } /** - * 全选按钮点击 (切换全选状态) + * 全选按钮点击 (切换全选状态,单向同步到子列表) */ fun checkAllClick() { val list = pageModel.rv?.commonAdapter()?.items as? List ?: return // 切换全选状态 val shouldCheckAll = !isAllChecked.value!! - list.forEach { it.checked.set(shouldCheckAll) } + + // 单向同步:主列表和子列表都设置为相同的选择状态 + list.forEach { maWb -> + maWb.checked.set(shouldCheckAll) + // 同步到所有子列表项 + maWb.haWbList?.forEach { haWb -> + haWb.checked.set(shouldCheckAll) + } + } + isAllChecked.value = shouldCheckAll pageModel.rv?.commonAdapter()?.notifyDataSetChanged()