diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMove.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMove.kt index 7ca9ce7..01a7981 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMove.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMove.kt @@ -1,5 +1,7 @@ package com.lukouguoji.module_base.bean +import androidx.databinding.ObservableBoolean +import com.lukouguoji.module_base.interfaces.ICheck import java.io.Serializable /** @@ -41,6 +43,15 @@ data class GjcMove( var remark: String = "", // 备注 var likeNo: String = "", // 部分运单号no(模糊查询) - // UI扩展字段 - var isSelected: Boolean = false // 是否被选中(用于多选) -) : Serializable + // UI扩展字段 - 使用ObservableBoolean实现自动UI更新 + val checked: ObservableBoolean = ObservableBoolean(false) +) : Serializable, ICheck { + + // 实现ICheck接口 + override fun getCheckObservable(): ObservableBoolean = checked + + // 兼容现有代码的属性(如果其他地方使用isSelected) + var isSelected: Boolean + get() = checked.get() + set(value) = checked.set(value) +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpMoveViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpMoveViewHolder.kt index 77f8edd..e94899a 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpMoveViewHolder.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpMoveViewHolder.kt @@ -4,6 +4,10 @@ import android.view.View import com.lukouguoji.gjc.databinding.ItemIntExpMoveBinding import com.lukouguoji.module_base.base.BaseViewHolder import com.lukouguoji.module_base.bean.GjcMove +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.impl.FlowBus +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch /** * 国际出港移库列表项ViewHolder @@ -16,10 +20,15 @@ class IntExpMoveViewHolder(view: View) : binding.bean = bean binding.position = position - // 点击整个item切换选中状态 - binding.root.setOnClickListener { - bean.isSelected = !bean.isSelected - binding.bean = bean // 触发DataBinding更新 + // 添加图标点击事件 - 切换选择状态 + binding.ivIcon.setOnClickListener { + bean.checked.set(!bean.checked.get()) // 反转选择状态 + binding.executePendingBindings() // 立即刷新UI + + // 发送事件通知Activity更新全选状态 + GlobalScope.launch { + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).emit("check_changed") + } } binding.executePendingBindings() diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt index 86398d1..663625d 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt @@ -11,6 +11,9 @@ import com.lukouguoji.gjc.databinding.ActivityIntExpMoveBinding import com.lukouguoji.gjc.viewModel.IntExpMoveViewModel import com.lukouguoji.module_base.base.BaseBindingActivity import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.impl.FlowBus +import com.lukouguoji.module_base.impl.observe import com.lukouguoji.module_base.ktx.addOnItemClickListener import com.lukouguoji.module_base.ktx.showToast import com.lukouguoji.module_base.model.ScanModel @@ -32,6 +35,7 @@ class IntExpMoveActivity : BaseBindingActivity + binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f + } + + // 监听item选择变化事件,更新全选状态 + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { + viewModel.onItemCheckChanged() + } + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { + viewModel.refresh() + } + } + /** * 扫码运单号 */ diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpMoveViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpMoveViewModel.kt index b622f00..1262d9d 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpMoveViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpMoveViewModel.kt @@ -13,6 +13,7 @@ import com.lukouguoji.module_base.ktx.launchLoadingCollect import com.lukouguoji.module_base.ktx.noNull import com.lukouguoji.module_base.ktx.showToast import com.lukouguoji.module_base.ktx.toRequestBody +import com.lukouguoji.module_base.util.CheckUtil import dev.utils.app.info.KeyValue /** @@ -50,6 +51,9 @@ class IntExpMoveViewModel : BasePageViewModel(), IOnItemClickListener { val totalPieces = MutableLiveData("0") // 总件数 val totalWeight = MutableLiveData("0") // 总重量 + // ========== 全选状态 ========== + val isAllChecked = MutableLiveData(false) + // ========== 适配器配置 ========== val itemViewHolder = IntExpMoveViewHolder::class.java val itemLayoutId = R.layout.item_int_exp_move @@ -74,18 +78,44 @@ class IntExpMoveViewModel : BasePageViewModel(), IOnItemClickListener { fun toggleSelectAll() { val adapter = pageModel.rv?.commonAdapter() ?: return val list = adapter.items.filterIsInstance() - val allSelected = list.all { it.isSelected } - list.forEach { it.isSelected = !allSelected } + // 使用CheckUtil处理全选逻辑 + CheckUtil.handleAllCheck(list) + + // 更新全选状态 + updateCheckAllStatus() + + // 刷新UI adapter.notifyDataSetChanged() } + /** + * 更新全选状态 + */ + fun updateCheckAllStatus() { + val adapter = pageModel.rv?.commonAdapter() ?: return + val list = adapter.items.filterIsInstance() + + if (list.isNotEmpty()) { + isAllChecked.value = list.all { it.checked.get() } + } else { + isAllChecked.value = false + } + } + + /** + * 单个item选择变化时调用(从Activity接收事件) + */ + fun onItemCheckChanged() { + updateCheckAllStatus() + } + /** * 获取选中的运单 */ fun getSelectedItems(): List { val adapter = pageModel.rv?.commonAdapter() ?: return emptyList() - return adapter.items.filterIsInstance().filter { it.isSelected } + return adapter.items.filterIsInstance().filter { it.checked.get() } } /** @@ -158,11 +188,9 @@ class IntExpMoveViewModel : BasePageViewModel(), IOnItemClickListener { } /** - * Item点击事件处理(用于单选CheckBox) + * Item点击事件处理(现已改为图标点击,此方法暂时保留兼容) */ override fun onItemClick(position: Int, type: Int) { - val bean = pageModel.rv?.commonAdapter()?.getItem(position) as? GjcMove ?: return - bean.isSelected = !bean.isSelected - pageModel.rv?.commonAdapter()?.notifyItemChanged(position) + // 图标点击已在ViewHolder中处理,此处不再需要 } } diff --git a/module_gjc/src/main/res/layout/activity_gjc_assemble_allocate.xml b/module_gjc/src/main/res/layout/activity_gjc_assemble_allocate.xml index d02dc40..46feae4 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_assemble_allocate.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_assemble_allocate.xml @@ -83,8 +83,8 @@ android:layout_weight="1"> diff --git a/module_gjc/src/main/res/layout/activity_gjc_box_weighing.xml b/module_gjc/src/main/res/layout/activity_gjc_box_weighing.xml index d16d7f5..8ddcbd6 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_box_weighing.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_box_weighing.xml @@ -89,17 +89,17 @@ android:gravity="center"> @@ -128,7 +128,7 @@ @@ -144,7 +144,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text='@{"合计:"+viewModel.totalCount+"票"}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" tools:text="合计:1票" /> @@ -154,7 +154,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text='@{"总件数:"+viewModel.totalPc}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" tools:text="总件数:100" /> @@ -164,7 +164,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text='@{"总重量:"+viewModel.totalWeight}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" tools:text="总重量:100" /> @@ -174,7 +174,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text='@{"总货重:"+viewModel.cargoWeight}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" tools:text="总货重:150" /> diff --git a/module_gjc/src/main/res/layout/activity_gjc_box_weighing_add.xml b/module_gjc/src/main/res/layout/activity_gjc_box_weighing_add.xml index 40dd99d..b281f91 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_box_weighing_add.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_box_weighing_add.xml @@ -35,7 +35,7 @@ android:layout_height="wrap_content" android:background="@drawable/bg_white_radius_8" android:orientation="vertical" - android:padding="20dp"> + android:padding="15dp"> diff --git a/module_gjc/src/main/res/layout/activity_int_exp_arrive.xml b/module_gjc/src/main/res/layout/activity_int_exp_arrive.xml index c796ab0..5a70d39 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_arrive.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_arrive.xml @@ -79,8 +79,8 @@ android:orientation="horizontal"> diff --git a/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml b/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml index 2d00988..6f56cf1 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml @@ -86,23 +86,26 @@ android:orientation="horizontal"> + android:layout_marginLeft="15dp" /> + android:layout_marginLeft="15dp" /> @@ -132,7 +135,7 @@ @@ -148,7 +151,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text='@{"合计:"+viewModel.totalCount+"票"}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" /> @@ -157,7 +160,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text='@{"总件数:"+viewModel.totalPieces}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" /> @@ -166,7 +169,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text='@{"总重量:"+viewModel.totalWeight}' - android:textColor="@color/white" + android:textColor="@color/bottom_tool_tips_text_color" android:textSize="18sp" android:textStyle="bold" /> diff --git a/module_gjc/src/main/res/layout/activity_int_exp_move.xml b/module_gjc/src/main/res/layout/activity_int_exp_move.xml index 7e7c52b..825981c 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_move.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_move.xml @@ -92,8 +92,8 @@ android:orientation="horizontal"> @@ -126,15 +126,27 @@ android:gravity="center_vertical" android:paddingHorizontal="15dp"> - - + + android:gravity="center_vertical" + android:onClick="@{()-> viewModel.toggleSelectAll()}"> + + + + + diff --git a/module_gjc/src/main/res/layout/item_int_exp_move.xml b/module_gjc/src/main/res/layout/item_int_exp_move.xml index f6b0ca9..81f469c 100644 --- a/module_gjc/src/main/res/layout/item_int_exp_move.xml +++ b/module_gjc/src/main/res/layout/item_int_exp_move.xml @@ -1,5 +1,6 @@ - + @@ -24,19 +25,14 @@ android:padding="15dp" android:gravity="center_vertical"> - - - - +