关联用户列表优化
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user