feat: 国际出港/进港全选按钮新增图标切换与反向同步

- 全选/未选图标替换为新的 vector drawable,抽出 setIVCheckAllImage BindingAdapter 集中管理
- 列表项取消选中或上拉加载新数据后,左下角全选按钮自动反向同步
- 修复 isAllChecked.observeForever 反模式:导致取消单项时全部被取消、单项点击无响应

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-21 18:48:59 +08:00
parent e2bda80e33
commit 07f50fdfc7
84 changed files with 313 additions and 260 deletions

View File

@@ -140,7 +140,14 @@
"Bash(cp \"/Users/kid/Downloads/Desktop/原始舱单.png\" /Users/kid/Development/Fusion/Projects/aerologic-app/module_gjj/src/main/res/mipmap-mdpi/gjj_yuan_shi_cang_dan_icon.png)",
"Bash(cp \"/Users/kid/Downloads/Desktop/提取记录.png\" /Users/kid/Development/Fusion/Projects/aerologic-app/module_gjj/src/main/res/mipmap-mdpi/gjj_ti_qu_ji_lu_icon.png)",
"mcp__api-doc__get_project_overview",
"mcp__plugin_claude-mem_mcp-search__get_observations"
"mcp__plugin_claude-mem_mcp-search__get_observations",
"Bash(awk *)",
"Bash(sed -n '65,90p' module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpLoadViewModel.kt)",
"Bash(sed -n '73,95p' module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpArriveViewModel.kt)",
"Bash(sed -n '60,75p' module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpOutHandoverViewModel.kt)",
"Bash(sed -n '73,100p' module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpArriveViewModel.kt)",
"Bash(sed -n '82,115p' module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpStorageUseViewModel.kt)",
"Bash(sed -n '212,240p' module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt)"
],
"deny": [],
"ask": []

View File

@@ -10,3 +10,10 @@ fun setIVCheckImage(imageView: ImageView, isChecked: Boolean) {
if (isChecked) R.drawable.img_p_check_s else R.drawable.img_p_check_n
)
}
@BindingAdapter("setIVCheckAllImage")
fun setIVCheckAllImage(imageView: ImageView, isChecked: Boolean) {
imageView.setImageResource(
if (isChecked) R.drawable.img_check_all_checked else R.drawable.img_check_all_unchecked
)
}

View File

@@ -117,9 +117,11 @@ class PageModel {
}
/**
* 处理列表数据
* 处理列表数据
* onDataApplied 在 adapter.items 真正更新后回调refresh/loadMore 都用 post 异步派发到 adapter
* 这里再嵌套一层 post 确保排在内部 post 之后)。
*/
fun handleDataList(list: List<Any>?) {
fun handleDataList(list: List<Any>?, onDataApplied: (() -> Unit)? = null) {
rv?.let {
it.post {
if (isRefresh()) {
@@ -127,6 +129,9 @@ class PageModel {
} else {
it.loadMore(list)
}
if (onDataApplied != null) {
it.post { onDataApplied() }
}
}
}
// 关闭加载状态
@@ -136,9 +141,9 @@ class PageModel {
/**
* 处理listBean数据
*/
fun handleListBean(listBean: BaseListBean<*>?) {
fun handleListBean(listBean: BaseListBean<*>?, onDataApplied: (() -> Unit)? = null) {
loge("rv:${rv}")
handleDataList(listBean?.list)
handleDataList(listBean?.list, onDataApplied)
haveMore.postValue((listBean?.pages ?: 1) > page)
}

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#1C8CF5"
android:fillType="evenOdd"
android:pathData="M512,962c-250.71428584,0 -450,-199.28571416 -450,-450s199.28571416,-450 450,-450 450,199.28571416 450,450 -199.28571416,450 -450,450zM762.71428584,306.28571416h-64.28571416c-12.85714248,0 -25.71428584,6.42857168 -32.14285752,19.28571416L454.14285752,614.85714248l-96.42857168,-128.57142832c-6.42857168,-12.85714248 -19.28571416,-19.28571416 -32.14285752,-19.28571416h-64.28571416c-6.42857168,0 -12.85714248,6.42857168 -6.42857168,12.85714248l167.14285752,231.42857168c19.28571416,25.71428584 51.42857168,25.71428584 70.71428584,0L769.14285752,319.14285752c6.42857168,-6.42857168 0,-12.85714248 -6.42857168,-12.85714336z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#707070"
android:pathData="M853.333333,530.962963a322.37037,322.37037 0,1 0,-322.37037 322.37037V910.222222C321.498074,910.222222 151.703704,740.427852 151.703704,530.962963S321.498074,151.703704 530.962963,151.703704s379.259259,169.79437 379.259259,379.259259 -169.79437,379.259259 -379.259259,379.259259v-56.888889a322.37037,322.37037 0,0 0,322.37037 -322.37037z"/>
</vector>

View File

@@ -46,12 +46,6 @@ class GjcAssembleAllocateActivity :
viewModel.onItemCheckChanged()
}
// 监听全选状态变化,更新图标
viewModel.isAllChecked.observe(this) { isAllChecked ->
// 通过alpha值表示全选状态全选时alpha=1.0未全选时alpha=0.5
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 初始化:获取分配人列表
viewModel.getAssembleCompanyList()

View File

@@ -46,12 +46,6 @@ class GjcInspectionActivity :
viewModel.onItemCheckChanged()
}
// 监听全选状态变化,更新图标
viewModel.isAllChecked.observe(this) { isAllChecked ->
// 通过alpha值表示全选状态全选时alpha=1.0未全选时alpha=0.5
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 初始化代理列表
viewModel.initAgentList()

View File

@@ -30,11 +30,6 @@ class GjcWeighingListActivity :
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 初始化代理人列表从API获取
viewModel.initAgentList()
@@ -46,6 +41,8 @@ class GjcWeighingListActivity :
.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner())
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH)
.observe(this) {
viewModel.refresh()

View File

@@ -44,11 +44,6 @@ class IntExpArriveActivity :
viewModel.searchClick()
}
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -56,6 +51,8 @@ class IntExpArriveActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -29,11 +29,6 @@ class IntExpLoadActivity :
setBackArrow("出港装载")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -41,6 +36,8 @@ class IntExpLoadActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -29,11 +29,6 @@ class IntExpOutHandoverActivity :
setBackArrow("出库交接")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -41,6 +36,8 @@ class IntExpOutHandoverActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -35,15 +35,12 @@ class IntExpStorageUseActivity :
binding.viewModel = viewModel
binding.activity = this
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -29,11 +29,6 @@ class IntExpTallyActivity :
setBackArrow("出港理货")
binding.viewModel = viewModel
// 观察全选状态,动态调整图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -41,6 +36,8 @@ class IntExpTallyActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -358,9 +358,9 @@ class GjcYiKuFragment : Fragment(), View.OnClickListener {
scanCode(Constant.RequestCode.gjc_yiku_wb_no_scan)
}
R.id.checkIcon -> {
//重置 isAllCheck
isAllCheck = !isAllCheck
resetSelCount(isAllCheck, totalCount)
checkIcon.setImageResource(if (isAllCheck) R.drawable.img_check_all_checked else R.drawable.img_check_all_unchecked)
}
R.id.send -> {
val ids = collectList.filter { c -> c.isCheck }.map { c -> c.id }

View File

@@ -4,6 +4,8 @@ import android.view.View
import com.lukouguoji.gjc.activity.GjcWeighingStartActivity
import com.lukouguoji.gjc.databinding.ItemGjcWeighingBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcWeighingBean
/**
@@ -22,6 +24,7 @@ class GjcWeighingViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
// 反转checked状态
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
// 立即更新UI (图片自动切换)
binding.executePendingBindings()

View File

@@ -5,6 +5,8 @@ import com.lukouguoji.gjc.R
import com.lukouguoji.gjc.databinding.ItemIntExpArriveBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcMaWb
import com.lukouguoji.module_base.ktx.refresh
@@ -24,6 +26,7 @@ class IntExpArriveViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
// 反转checked状态
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
// 立即更新UI图片自动切换
binding.executePendingBindings()

View File

@@ -3,6 +3,8 @@ package com.lukouguoji.gjc.holder
import android.view.View
import com.lukouguoji.gjc.databinding.ItemIntExpLoadBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcExportLoad
/**
@@ -21,6 +23,7 @@ class IntExpLoadViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
// 反转checked状态
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
// 立即更新UI (图片自动切换)
binding.executePendingBindings()

View File

@@ -3,6 +3,8 @@ package com.lukouguoji.gjc.holder
import android.view.View
import com.lukouguoji.gjc.databinding.ItemIntExpOutHandoverBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcUldUseBean
/**
@@ -21,6 +23,7 @@ class IntExpOutHandoverViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
// 反转checked状态
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
// 立即更新UI图片自动切换
binding.executePendingBindings()

View File

@@ -5,6 +5,8 @@ import com.lukouguoji.gjc.R
import com.lukouguoji.gjc.databinding.ItemIntExpStorageUseBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcMaWb
import com.lukouguoji.module_base.ktx.refresh
@@ -25,10 +27,12 @@ class IntExpStorageUseViewHolder(view: View) :
// 切换主列表项的选择状态
val newCheckedState = !bean.checked.get()
bean.checked.set(newCheckedState)
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
// 联动勾选/取消所有子列表项
bean.storageUseList?.forEach { storageUse ->
storageUse.checked.set(newCheckedState)
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
}
// 刷新UI

View File

@@ -5,6 +5,8 @@ import com.lukouguoji.gjc.R
import com.lukouguoji.gjc.databinding.ItemIntExpTallyBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcMaWb
import com.lukouguoji.module_base.ktx.refresh
@@ -24,6 +26,7 @@ class IntExpTallyViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
// 只切换主单自己的选择状态,不同步到分单
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
// 刷新UI
binding.executePendingBindings()

View File

@@ -65,11 +65,6 @@ class IntExpMoveActivity : BaseBindingActivity<ActivityIntExpMoveBinding, IntExp
* 观察数据变化
*/
private fun observeData() {
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 监听item选择变化事件,更新全选状态
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) {
viewModel.onItemCheckChanged()

View File

@@ -91,8 +91,7 @@ class GjcAssembleAllocateViewModel : BasePageViewModel() {
NetApply.api.getGjcAssembleAllocateList(listParams)
}) {
onSuccess = { pageInfo ->
// 直接转换为 BaseListBean
pageModel.handleListBean(pageInfo.toBaseListBean())
pageModel.handleListBean(pageInfo.toBaseListBean()) { updateCheckAllStatus() }
}
}

View File

@@ -118,7 +118,7 @@ class GjcInspectionViewModel : BasePageViewModel() {
NetApply.api.getGjcInspectionList(listParams)
}) {
onSuccess = {
pageModel.handleListBean(it)
pageModel.handleListBean(it) { updateCheckAllStatus() }
}
}

View File

@@ -56,13 +56,13 @@ class GjcWeighingViewModel : BasePageViewModel() {
// 全选状态
val isAllChecked = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcWeighingBean> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcWeighingBean> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
///////////////////////////////////////////////////////////////////////////
@@ -210,7 +210,7 @@ class GjcWeighingViewModel : BasePageViewModel() {
NetApply.api.getGjcWeighingList(listParams)
}) {
onSuccess = {
pageModel.handleListBean(it)
pageModel.handleListBean(it) { updateCheckAllStatus() }
}
}

View File

@@ -43,6 +43,15 @@ class IntExpArriveViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 全局展开状态 ==========
/**
* 全局展开状态
@@ -51,15 +60,6 @@ class IntExpArriveViewModel : BasePageViewModel() {
*/
val isAllExpanded = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
}
// ========== 适配器配置 ==========
val itemViewHolder = IntExpArriveViewHolder::class.java
val itemLayoutId = R.layout.item_int_exp_arrive
@@ -312,7 +312,7 @@ class IntExpArriveViewModel : BasePageViewModel() {
// 获取列表 (带Loading)
launchLoadingCollect({ NetApply.api.getIntExpArriveList(listParams) }) {
onSuccess = {
pageModel.handleListBean(it)
pageModel.handleListBean(it) { updateCheckAllStatus() }
// 数据加载完成后,重置全局展开状态为收起
isAllExpanded.value = false
}

View File

@@ -43,13 +43,13 @@ class IntExpLoadViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcExportLoad> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcExportLoad> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -215,7 +215,7 @@ class IntExpLoadViewModel : BasePageViewModel() {
// 获取列表 (带Loading)
launchLoadingCollect({ NetApply.api.getIntExpLoadList(listParams) }) {
onSuccess = { pageModel.handleListBean(it) }
onSuccess = { pageModel.handleListBean(it) { updateCheckAllStatus() } }
}
// 获取统计信息 (后台请求,不阻塞列表)

View File

@@ -165,7 +165,9 @@ class IntExpMoveViewModel : BasePageViewModel(), IOnItemClickListener {
// 获取列表显示loading
launchLoadingCollect({ NetApply.api.getIntExpMoveList(listParams) }) {
onSuccess = { pageModel.handleListBean(it) }
onSuccess = {
pageModel.handleListBean(it) { updateCheckAllStatus() }
}
}
// 获取统计(后台调用)

View File

@@ -40,13 +40,13 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcUldUseBean> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcUldUseBean> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -182,7 +182,7 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
// 获取列表 (带Loading)
launchLoadingCollect({ NetApply.api.getIntExpOutHandoverList(listParams) }) {
onSuccess = { pageModel.handleListBean(it) }
onSuccess = { pageModel.handleListBean(it) { updateCheckAllStatus() } }
}
// 获取统计信息 (后台请求)

View File

@@ -43,6 +43,15 @@ class IntExpStorageUseViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 全局展开状态 ==========
/**
* 全局展开状态
@@ -59,13 +68,6 @@ class IntExpStorageUseViewModel : BasePageViewModel() {
KeyValue("异常", "1")
)
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list =
pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
}
// ========== 适配器配置 ==========
@@ -322,7 +324,7 @@ class IntExpStorageUseViewModel : BasePageViewModel() {
launchLoadingCollect({ NetApply.api.getIntExpStorageUseList(listParams) }) {
onSuccess = { result ->
// 手动处理 PageInfo 数据
pageModel.handleDataList(result.list)
pageModel.handleDataList(result.list) { updateCheckAllStatus() }
pageModel.haveMore.postValue((result.pages) > pageModel.page)
// 数据加载完成后,重置全局展开状态为收起
isAllExpanded.value = false

View File

@@ -44,6 +44,15 @@ class IntExpTallyViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 全局展开状态 ==========
/**
* 全局展开状态
@@ -52,15 +61,6 @@ class IntExpTallyViewModel : BasePageViewModel() {
*/
val isAllExpanded = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
}
// ========== 适配器配置 ==========
val itemViewHolder = IntExpTallyViewHolder::class.java
val itemLayoutId = R.layout.item_int_exp_tally
@@ -316,7 +316,7 @@ class IntExpTallyViewModel : BasePageViewModel() {
// 获取列表 (带Loading)
launchLoadingCollect({ NetApply.api.getIntExpTallyList(listParams) }) {
onSuccess = {
pageModel.handleListBean(it)
pageModel.handleListBean(it) { updateCheckAllStatus() }
// 数据加载完成后,重置全局展开状态为收起
isAllExpanded.value = false
}

View File

@@ -138,10 +138,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</LinearLayout>

View File

@@ -148,10 +148,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</LinearLayout>

View File

@@ -150,7 +150,7 @@
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:onClick="@{viewModel::checkAllClick}"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -149,9 +149,10 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -151,10 +151,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -128,10 +128,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -152,10 +152,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</LinearLayout>
<!-- 统计信息 -->

View File

@@ -130,10 +130,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -162,10 +162,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -152,10 +152,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -175,7 +175,7 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="2dp"
android:src="@mipmap/gjc_check_icon" />
android:src="@drawable/img_check_all_unchecked" />
<LinearLayout
android:layout_width="0dp"

View File

@@ -368,9 +368,9 @@ class GjjCangDanListActivity : BaseActivity(), View.OnClickListener {
.navigation(this, Constant.RequestCode.gjj_cang_dan_list)
}
R.id.checkIcon -> {
//重置 isAllCheck
isAllCheck = !isAllCheck
resetSelCount(isAllCheck)
checkIcon.setImageResource(if (isAllCheck) R.drawable.img_check_all_checked else R.drawable.img_check_all_unchecked)
}
R.id.send -> {
val ids = collectList.filter { c -> c.isCheck }.map { c -> c.id.toInt() }

View File

@@ -436,7 +436,7 @@ class GjjChuKuListActivity : BaseActivity(), View.OnClickListener {
} else {
viewModel.setCheckCount(0)
}
//重置 isAllCheck
checkIcon.setImageResource(if (isAllCheck) R.drawable.img_check_all_checked else R.drawable.img_check_all_unchecked)
isAllCheck = !isAllCheck
adapter.notifyDataSetChanged()
}

View File

@@ -29,11 +29,6 @@ class IntArrAirManifestActivity :
setBackArrow("国际进港原始舱单")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -41,6 +36,8 @@ class IntArrAirManifestActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -33,14 +33,12 @@ class IntImpAccidentVisaActivity :
setBackArrow("国际事故签证")
binding.viewModel = viewModel
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
binding.rv.addOnItemClickListener(this)
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -35,11 +35,6 @@ class IntImpLoadingListActivity :
binding.viewModel = viewModel
binding.activity = this
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -47,6 +42,8 @@ class IntImpLoadingListActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -29,11 +29,6 @@ class IntImpManifestActivity :
setBackArrow("国际进港舱单")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -41,6 +36,8 @@ class IntImpManifestActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -28,11 +28,6 @@ class IntImpMsgParseActivity :
setBackArrow("电报生成")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -40,6 +35,8 @@ class IntImpMsgParseActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -28,15 +28,12 @@ class IntImpPickUpDLVActivity :
setBackArrow("国际进港出库")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -35,11 +35,6 @@ class IntImpPickUpRecordActivity :
binding.viewModel = viewModel
binding.activity = this
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -58,6 +53,8 @@ class IntImpPickUpRecordActivity :
})
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -35,15 +35,12 @@ class IntImpStorageUseActivity :
binding.viewModel = viewModel
binding.activity = this
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -29,11 +29,6 @@ class IntImpTallyActivity :
setBackArrow("国际进港理货报告")
binding.viewModel = viewModel
// 观察全选状态,更新图标透明度
viewModel.isAllChecked.observe(this) { isAllChecked ->
binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
}
// 绑定分页
viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
@@ -41,6 +36,8 @@ class IntImpTallyActivity :
binding.rv.addOnItemClickListener(viewModel)
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() }
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).observe(this) {
viewModel.refresh()
}

View File

@@ -5,6 +5,8 @@ import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.ItemIntArrAirManifestBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjjAirManifest
import com.lukouguoji.module_base.ktx.refresh
@@ -29,6 +31,7 @@ class IntArrAirManifestViewHolder(view: View) :
// 图标点击 - 切换选择状态(独立选择,不联动子列表)
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -3,6 +3,8 @@ package com.lukouguoji.gjj.holder
import android.view.View
import com.lukouguoji.gjj.databinding.ItemIntImpAccidentVisaBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.IntImpAccidentVisaBean
/**
@@ -19,6 +21,7 @@ class IntImpAccidentVisaViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -3,6 +3,8 @@ package com.lukouguoji.gjj.holder
import android.view.View
import com.lukouguoji.gjj.databinding.ItemIntImpLoadingListBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjjManifest
/**
@@ -20,6 +22,7 @@ class IntImpLoadingListViewHolder(view: View) :
// 添加图标点击事件 - 切换选择状态
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -6,6 +6,8 @@ import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.ItemIntImpManifestBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjjManifest
import com.lukouguoji.module_base.ktx.refresh
@@ -25,6 +27,7 @@ class IntImpManifestViewHolder(view: View) :
binding.ivIcon.setOnClickListener {
val newCheckedState = !bean.checked.get()
bean.checked.set(newCheckedState)
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -3,6 +3,8 @@ package com.lukouguoji.gjj.holder
import android.view.View
import com.lukouguoji.gjj.databinding.ItemIntImpMsgParseBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.MsgReceivePool
class IntImpMsgParseViewHolder(view: View) :
@@ -20,6 +22,7 @@ class IntImpMsgParseViewHolder(view: View) :
// 选择框点击 - 切换选择状态(拦截,不触发卡片点击)
binding.ivCheck.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}
}

View File

@@ -3,6 +3,8 @@ package com.lukouguoji.gjj.holder
import android.view.View
import com.lukouguoji.gjj.databinding.ItemIntImpPickUpDlvBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean
/**
@@ -20,6 +22,7 @@ class IntImpPickUpDLVViewHolder(view: View) :
// 点击图标切换选中状态
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}
}

View File

@@ -4,6 +4,8 @@ import android.view.View
import com.lukouguoji.gjj.activity.IntImpPickUpRecordDetailsActivity
import com.lukouguoji.gjj.databinding.ItemIntImpPickUpRecordBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.IntImpPickUpRecordBean
/**
@@ -21,6 +23,7 @@ class IntImpPickUpRecordViewHolder(view: View) :
// 图标点击切换选择状态
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -5,6 +5,8 @@ import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.ItemIntImpStorageUseBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjcMaWb
import com.lukouguoji.module_base.ktx.refresh
@@ -23,6 +25,7 @@ class IntImpStorageUseViewHolder(view: View) :
// 图标点击切换选择状态
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -6,6 +6,8 @@ import com.lukouguoji.gjj.databinding.ItemIntImpTallyBinding
import com.lukouguoji.gjj.activity.IntImpTallyDetailsActivity
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.bean.GjjImportTally
import com.google.gson.Gson
import com.lukouguoji.module_base.http.net.NetApply
@@ -28,6 +30,7 @@ class IntImpTallyViewHolder(view: View) :
// 选中图标点击 - 切换选择状态(独立选择,不联动分单)
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
FlowBus.with<String>(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed")
binding.executePendingBindings()
}

View File

@@ -42,21 +42,18 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 全部展开状态 ==========
val isAllExpanded = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项(含子列表)
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return@observeForever
list.forEach {
it.checked.set(checked)
it.haWbList?.forEach { sub -> sub.checked.set(checked) }
}
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
}
// ========== 适配器配置 ==========
val itemViewHolder = IntArrAirManifestViewHolder::class.java
val itemLayoutId = R.layout.item_int_arr_air_manifest
@@ -267,7 +264,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
if (it.fno.isEmpty()) it.fno = fn
}
}
pageModel.handleListBean(result.toBaseListBean())
pageModel.handleListBean(result.toBaseListBean()) { updateCheckAllStatus() }
}
}

View File

@@ -45,13 +45,13 @@ class IntImpAccidentVisaViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<IntImpAccidentVisaBean>
?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<IntImpAccidentVisaBean> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -188,7 +188,7 @@ class IntImpAccidentVisaViewModel : BasePageViewModel() {
launchLoadingCollect({ NetApply.api.getIntImpAccidentVisaList(listParams) }) {
onSuccess = { pageInfo ->
pageModel.handleListBean(pageInfo.toBaseListBean())
pageModel.handleListBean(pageInfo.toBaseListBean()) { updateCheckAllStatus() }
totalCount.value = (pageInfo.total ?: 0).toString()
}
}

View File

@@ -110,13 +110,13 @@ class IntImpLoadingListViewModel : BasePageViewModel(), IOnItemClickListener {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjManifest> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjManifest> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -317,7 +317,7 @@ class IntImpLoadingListViewModel : BasePageViewModel(), IOnItemClickListener {
// 获取列表带Loading
launchLoadingCollect({ NetApply.api.getIntImpLoadingList(listParams) }) {
onSuccess = { result ->
pageModel.handleListBean(result.toBaseListBean())
pageModel.handleListBean(result.toBaseListBean()) { updateCheckAllStatus() }
}
}

View File

@@ -126,6 +126,15 @@ class IntImpManifestViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjManifest> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 展开/收起 ==========
val isAllExpanded = MutableLiveData(false)
@@ -528,7 +537,7 @@ class IntImpManifestViewModel : BasePageViewModel() {
// 获取列表带Loading
launchLoadingCollect({ NetApply.api.getIntImpManifestList(listParams) }) {
onSuccess = { result ->
pageModel.handleListBean(result.toBaseListBean())
pageModel.handleListBean(result.toBaseListBean()) { updateCheckAllStatus() }
}
}

View File

@@ -46,6 +46,15 @@ class IntImpMsgParseViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<MsgReceivePool> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
init {
// 初始化报文类型静态数据
msgTypeList.value = listOf(
@@ -53,12 +62,6 @@ class IntImpMsgParseViewModel : BasePageViewModel() {
KeyValue("FWB/FHL", "FWB/FHL")
)
// 监听全选状态,自动更新所有列表项
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<MsgReceivePool> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
}
// ========== 航班级联查询 ==========
@@ -211,7 +214,7 @@ class IntImpMsgParseViewModel : BasePageViewModel() {
// 获取列表带Loading
launchLoadingCollect({ NetApply.api.getIntImpMsgList(listParams) }) {
onSuccess = { pageInfo ->
pageModel.handleListBean(pageInfo.toBaseListBean())
pageModel.handleListBean(pageInfo.toBaseListBean()) { updateCheckAllStatus() }
totalCount.value = (pageInfo.total ?: 0).toString()
}
}

View File

@@ -47,13 +47,13 @@ class IntImpPickUpDLVViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<IntImpPickUpDLVBean>
?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<IntImpPickUpDLVBean> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -156,7 +156,7 @@ class IntImpPickUpDLVViewModel : BasePageViewModel() {
launchLoadingCollect({ NetApply.api.getIntImpPickUpDLVList(listParams) }) {
onSuccess = { result ->
pageModel.handleDataList(result.list)
pageModel.handleDataList(result.list) { updateCheckAllStatus() }
pageModel.haveMore.postValue((result.pages) > pageModel.page)
}
}

View File

@@ -49,13 +49,13 @@ class IntImpPickUpRecordViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<IntImpPickUpRecordBean>
?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<IntImpPickUpRecordBean> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -162,7 +162,7 @@ class IntImpPickUpRecordViewModel : BasePageViewModel() {
launchLoadingCollect({ NetApply.api.getIntImpPickUpRecordList(listParams) }) {
onSuccess = { result ->
pageModel.handleDataList(result.list)
pageModel.handleDataList(result.list) { updateCheckAllStatus() }
pageModel.haveMore.postValue((result.pages) > pageModel.page)
}
}

View File

@@ -44,6 +44,15 @@ class IntImpStorageUseViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 全局展开状态 ==========
val isAllExpanded = MutableLiveData(false)
@@ -54,12 +63,6 @@ class IntImpStorageUseViewModel : BasePageViewModel() {
KeyValue("异常", "1")
)
isAllChecked.observeForever { checked ->
val list =
pageModel.rv?.commonAdapter()?.items as? List<GjcMaWb> ?: return@observeForever
list.forEach { it.checked.set(checked) }
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
}
// ========== 适配器配置 ==========
@@ -268,7 +271,7 @@ class IntImpStorageUseViewModel : BasePageViewModel() {
launchLoadingCollect({ NetApply.api.getIntImpStorageUseList(listParams) }) {
onSuccess = { result ->
pageModel.handleDataList(result.list)
pageModel.handleDataList(result.list) { updateCheckAllStatus() }
pageModel.haveMore.postValue((result.pages) > pageModel.page)
isAllExpanded.value = false
}

View File

@@ -42,16 +42,13 @@ class IntImpTallyViewModel : BasePageViewModel() {
// ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false)
init {
// 监听全选状态,自动更新所有列表项(主单和分单独立全选)
isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjImportTally> ?: return@observeForever
list.forEach {
it.checked.set(checked)
it.haWbList?.forEach { sub -> sub.checked.set(checked) }
}
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
fun onItemCheckChanged() {
updateCheckAllStatus()
}
fun updateCheckAllStatus() {
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjImportTally> ?: return
isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() }
}
// ========== 适配器配置 ==========
@@ -278,7 +275,7 @@ class IntImpTallyViewModel : BasePageViewModel() {
}) {
onSuccess = { pageInfo ->
// ⚠️ 核心使用toBaseListBean()转换PageInfo为BaseListBean
pageModel.handleListBean(pageInfo.toBaseListBean())
pageModel.handleListBean(pageInfo.toBaseListBean()) { updateCheckAllStatus() }
}
}

View File

@@ -245,7 +245,7 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="2dp"
android:src="@mipmap/img_all_check" />
android:src="@drawable/img_check_all_unchecked" />
<LinearLayout
android:layout_width="0dp"

View File

@@ -263,9 +263,9 @@
<ImageView
android:id="@+id/checkIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/img_all_check" />
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/img_check_all_unchecked" />
<LinearLayout
android:layout_width="0dp"

View File

@@ -159,7 +159,7 @@
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:onClick="@{viewModel::onAllClick}"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -204,7 +204,7 @@
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:onClick="@{viewModel::selectAllClick}"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -194,7 +194,7 @@
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:onClick="@{viewModel::onAllClick}"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -145,10 +145,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -158,10 +158,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -155,10 +155,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -194,10 +194,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -143,10 +143,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -139,10 +139,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -143,10 +143,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -162,10 +162,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"

View File

@@ -137,10 +137,11 @@
<ImageView
android:id="@+id/checkIcon"
setIVCheckAllImage="@{viewModel.isAllChecked}"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="5dp"
android:src="@drawable/img_check_all" />
android:src="@drawable/img_check_all_unchecked" />
<TextView
android:layout_width="wrap_content"