关联用户列表优化

This commit is contained in:
2026-05-25 14:04:53 +08:00
parent fe025c8a69
commit fd84f18e4d
7 changed files with 206 additions and 366 deletions

View File

@@ -5,7 +5,6 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.defenseapplication.databinding.ItemLinkedUserBinding
import com.example.defenseapplication.view.SlideLayout
data class LinkedUser(
val userId: String,
@@ -16,18 +15,11 @@ data class LinkedUser(
)
class LinkedUserAdapter(
private val deleteText: String,
private val isUnlinkMode: Boolean,
private val onItemClick: (LinkedUser, Int) -> Unit,
private val onDeleteClick: (LinkedUser, Int) -> Unit
private val onItemClick: (LinkedUser, Int) -> Unit
) : RecyclerView.Adapter<LinkedUserAdapter.LinkedUserViewHolder>() {
private val items = mutableListOf<LinkedUser>()
private var _openSlideLayout: SlideLayout? = null
/** 供外部(如 Activity访问当前展开的 SlideLayout */
val openSlideLayout: SlideLayout?
get() = _openSlideLayout
fun submitList(userList: List<LinkedUser>) {
items.clear()
@@ -52,54 +44,7 @@ class LinkedUserAdapter(
}
override fun onBindViewHolder(holder: LinkedUserViewHolder, position: Int) {
val item = items[position]
holder.bind(item)
// 每次 bind 都设置监听器RecyclerView 复用视图时也会调用
val slideLayout = holder.itemView as SlideLayout
slideLayout.setOnSlideChangeListener(object : SlideLayout.OnSlideChangeListener {
override fun onMenuOpen(slideLayout: SlideLayout) {
val prev = _openSlideLayout
if (prev != null && prev != slideLayout) {
prev.closeMenu()
}
_openSlideLayout = slideLayout
}
override fun onMenuClose(slideLayout: SlideLayout) {
if (_openSlideLayout == slideLayout) {
_openSlideLayout = null
}
}
override fun onClick(slideLayout: SlideLayout) {
val prev = _openSlideLayout
if (prev != null && prev != slideLayout) {
prev.closeMenu()
}
}
})
holder.binding.llContent.setOnClickListener {
val pos = holder.bindingAdapterPosition
if (pos != RecyclerView.NO_POSITION) {
onItemClick(items[pos], pos)
}
}
holder.binding.tvDeleteAction.setOnClickListener {
val pos = holder.bindingAdapterPosition
if (pos != RecyclerView.NO_POSITION) {
onDeleteClick(items[pos], pos)
}
}
holder.binding.tvUnlinkAction.setOnClickListener {
val pos = holder.bindingAdapterPosition
if (pos != RecyclerView.NO_POSITION) {
onDeleteClick(items[pos], pos)
}
}
holder.bind(items[position], position)
}
override fun getItemCount(): Int = items.size
@@ -108,19 +53,14 @@ class LinkedUserAdapter(
val binding: ItemLinkedUserBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: LinkedUser) {
fun bind(item: LinkedUser, position: Int) {
binding.tvUserName.text = item.name
binding.tvTime.text = item.time
binding.tvPhone.text = "手机号码:${item.phone}"
binding.tvIdCard.text = "身份证号:${item.idCard}"
if (isUnlinkMode) {
binding.tvUnlinkAction.visibility = View.VISIBLE
binding.tvDeleteAction.visibility = View.GONE
} else {
binding.tvUnlinkAction.visibility = View.GONE
binding.tvDeleteAction.visibility = View.VISIBLE
binding.tvDeleteAction.text = deleteText
binding.root.setOnClickListener {
onItemClick(item, position)
}
}
}