左晓为主开发手持机充值管理机
zuojincheng
2025-04-03 d0a0e8e242e293ad35dfbee1217f1103302818cd
generallibrary/src/main/java/com/dayu/general/adapter/CardListAdapter.kt
@@ -1,9 +1,14 @@
package com.dayu.general.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.dayu.baselibrary.databinding.ItemNoMoreBinding
import com.dayu.general.R
import com.dayu.general.bean.net.SearchCardResult
import com.dayu.general.databinding.ItemCardListBinding
@@ -12,40 +17,82 @@
 * Author: zuo
 * Date: 2025/3/31
 */
class CardListAdapter : RecyclerView.Adapter<CardListAdapter.CardViewHolder>() {
class CardListAdapter(context: Context) : BaseRecycleAdapter<RecyclerView.ViewHolder>() {
    private val cardList = mutableListOf<SearchCardResult.CardInfo>()
    private var cardList: List<SearchCardResult.CardInfo> = emptyList()
    private var onItemClickListener: ((SearchCardResult.CardInfo) -> Unit)? = null
    var mContext: Context = context
    fun setData(cards: List<SearchCardResult.CardInfo>) {
        cardList.clear()
        cardList.addAll(cards)
    fun setData(data: List<SearchCardResult.CardInfo>) {
        cardList = data
        notifyDataSetChanged()
    }
    fun addData(cards: List<SearchCardResult.CardInfo>) {
        val startPosition = cardList.size
        cardList.addAll(cards)
        notifyItemRangeInserted(startPosition, cards.size)
    fun addData(data: List<SearchCardResult.CardInfo>) {
        val oldSize = cardList.size
        cardList = cardList + data
        notifyItemRangeInserted(oldSize, data.size)
    }
    fun setOnItemClickListener(listener: (SearchCardResult.CardInfo) -> Unit) {
        this.onItemClickListener = listener
        onItemClickListener = listener
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
        val binding = ItemCardListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return CardViewHolder(binding)
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        if (viewType == VIEW_TYPE_EMPTY) {
            val emptyView: ItemNoMoreBinding = DataBindingUtil.inflate(
                (mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater)!!,
                com.dayu.baselibrary.R.layout.item_no_more,
                parent,
                false
            )
            return ViewHolderEmpty(emptyView)
        } else {
            val binding = ItemCardListBinding.inflate(
                mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater,
                parent,
                false
            )
            return CardViewHolder(binding)
        }
    }
    override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
        val card = cardList[position]
        holder.bind(card)
    override fun getItemViewType(position: Int): Int {
        if (cardList.size == 0) {
            return VIEW_TYPE_EMPTY
        } else {
            return VIEW_TYPE_ITEM
        }
    }
    override fun getItemCount(): Int = cardList.size
    override fun getItemCount(): Int {
        //同时这里也需要添加判断,如果mData.size()为0的话,只引入一个布局,就是emptyView
        // 那么,这个recyclerView的itemCount为1
        if (cardList.size == 0) {
            return 1
        }
        return cardList.size
    }
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        if (holder is ViewHolderEmpty) {
            // 空视图不需要绑定数据
            return
        }
        if (holder is CardViewHolder) {
            val card = cardList[position]
            holder.bind(card)
            holder.itemView.setOnClickListener {
                onItemClickListener?.invoke(card)
            }
        }
    }
    inner class CardViewHolder(private val binding: ItemCardListBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind(card: SearchCardResult.CardInfo) {
            // 设置数据显示,添加判空处理
            binding.tvCardNumber.text = "卡号:${card.cardNum ?: "无"}"
@@ -55,24 +102,13 @@
            binding.tvClientNum.text = "客户编号:${card.clientNum ?: "无"}"
            binding.tvCardBalance.text = "余额:${card.money ?: "0.00"} 元"
            binding.tvPhone.text = "电话:${formatPhone(card.phone)}"
            // 显示身份证号
            card.idCard?.let { idCard ->
                if (idCard.isNotEmpty()) {
                    binding.tvIdCard.text = "身份证:${formatIdCard(idCard)}"
                    binding.tvIdCard.visibility = View.VISIBLE
                } else {
                    binding.tvIdCard.visibility = View.GONE
                }
            } ?: run {
                binding.tvIdCard.visibility = View.GONE
            }
            binding.tvIdCard.text = "身份证:${formatIdCard( card.idCard)}"
            binding.root.setOnClickListener {
                onItemClickListener?.invoke(card)
            }
        }
        // 格式化身份证号,保护隐私
        private fun formatIdCard(idCard: String?): String {
            return if (!idCard.isNullOrEmpty() && idCard.length >= 18) {
@@ -83,7 +119,7 @@
                idCard ?: "无"
            }
        }
        // 格式化手机号,保护隐私
        private fun formatPhone(phone: String?): String {
            return if (!phone.isNullOrEmpty() && phone.length >= 11) {
@@ -94,5 +130,4 @@
                phone ?: "无"
            }
        }
    }
}
} }