左晓为主开发手持机充值管理机
zuojincheng
2025-04-03 d0a0e8e242e293ad35dfbee1217f1103302818cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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
 
/**
 * Description: 卡片列表适配器
 * Author: zuo
 * Date: 2025/3/31
 */
class CardListAdapter(context: Context) : BaseRecycleAdapter<RecyclerView.ViewHolder>() {
 
    private var cardList: List<SearchCardResult.CardInfo> = emptyList()
    private var onItemClickListener: ((SearchCardResult.CardInfo) -> Unit)? = null
    var mContext: Context = context
 
    fun setData(data: List<SearchCardResult.CardInfo>) {
        cardList = data
        notifyDataSetChanged()
    }
 
    fun addData(data: List<SearchCardResult.CardInfo>) {
        val oldSize = cardList.size
        cardList = cardList + data
        notifyItemRangeInserted(oldSize, data.size)
    }
 
    fun setOnItemClickListener(listener: (SearchCardResult.CardInfo) -> Unit) {
        onItemClickListener = listener
    }
 
 
    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 getItemViewType(position: Int): Int {
        if (cardList.size == 0) {
            return VIEW_TYPE_EMPTY
        } else {
            return VIEW_TYPE_ITEM
        }
    }
 
    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 ?: "无"}"
            binding.tvCardType.text = "卡类型:${card.cardType ?: "未知"}"
            binding.tvCardStatus.text = "状态:${card.stateName ?: "未知"}"
            binding.tvClientName.text = "姓名:${card.clientName ?: "未知"}"
            binding.tvClientNum.text = "客户编号:${card.clientNum ?: "无"}"
            binding.tvCardBalance.text = "余额:${card.money ?: "0.00"} 元"
            binding.tvPhone.text = "电话:${formatPhone(card.phone)}"
            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) {
                val start = idCard.substring(0, 6)
                val end = idCard.substring(idCard.length - 4)
                "$start****$end"
            } else {
                idCard ?: "无"
            }
        }
 
        // 格式化手机号,保护隐私
        private fun formatPhone(phone: String?): String {
            return if (!phone.isNullOrEmpty() && phone.length >= 11) {
                val start = phone.substring(0, 3)
                val end = phone.substring(phone.length - 4)
                "$start****$end"
            } else {
                phone ?: "无"
            }
        }
} }