fix: 国际进港舱单编辑页下拉框回填及移除404接口

- 使用 DictUtils checkedValue 机制回填编辑模式下拉框选中项
- 移除已404的 searchCargoType 接口调用
- PadDataLayoutNew 增加 updateSpinnerSilently 防止 adapter 重建覆盖值
- CLAUDE.md 补充编辑表单 SPINNER 回填规范

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-01 17:55:19 +08:00
parent 67b2dc6d71
commit c9625f6bfd
3 changed files with 141 additions and 48 deletions

View File

@@ -97,7 +97,7 @@ class PadDataLayoutNew : FrameLayout {
et.hint = value
tv.hint = value
bindAdapter(spinner, list, hint)
updateSpinnerSilently { bindAdapter(spinner, list, hint) }
}
var required = false
@@ -106,11 +106,29 @@ class PadDataLayoutNew : FrameLayout {
tvM.visibility = if (value) VISIBLE else INVISIBLE
}
private val spinnerCallback = object : IOnSpinnerSelected {
override fun onSelected(position: Int) {
value = list.getOrNull(position)?.value ?: ""
refreshCallBack?.invoke()
}
}
private val restoreListenerRunnable = Runnable {
bindOnSelected(spinner, spinnerCallback)
}
private fun updateSpinnerSilently(block: () -> Unit) {
spinner.onItemSelectedListener = null
spinner.removeCallbacks(restoreListenerRunnable)
block()
onValueSet()
spinner.post(restoreListenerRunnable)
}
var list = emptyList<KeyValue>()
set(value) {
field = value
bindAdapter(spinner, value, hint)
onValueSet()
updateSpinnerSilently { bindAdapter(spinner, value, hint) }
}
var icon: Any? = null
@@ -183,12 +201,7 @@ class PadDataLayoutNew : FrameLayout {
et.doOnTextChanged { text, _, _, _ ->
value = text.toString()
}
bindOnSelected(spinner, object : IOnSpinnerSelected {
override fun onSelected(position: Int) {
value = list.getOrNull(position)?.value ?: ""
refreshCallBack?.invoke()
}
})
bindOnSelected(spinner, spinnerCallback)
// 监听输入框焦点变化
com.lukouguoji.module_base.adapter.setOnFocusChangeListener(
et, object : IOnFocusChangeListener {