| | |
| | | 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 |
| | | |
| | |
| | | * 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 ?: "无"}" |
| | |
| | | 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) { |
| | |
| | | idCard ?: "无" |
| | | } |
| | | } |
| | | |
| | | |
| | | // 格式化手机号,保护隐私 |
| | | private fun formatPhone(phone: String?): String { |
| | | return if (!phone.isNullOrEmpty() && phone.length >= 11) { |
| | |
| | | phone ?: "无" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } } |