From d773ab0295feba24ae4fc14f61e8aa310e40f4ba Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期五, 06 六月 2025 16:55:57 +0800
Subject: [PATCH] refactor(nfc): 优化写卡流程和状态更新
---
generallibrary/src/main/java/com/dayu/general/adapter/CardListAdapter.kt | 105 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 70 insertions(+), 35 deletions(-)
diff --git a/generallibrary/src/main/java/com/dayu/general/adapter/CardListAdapter.kt b/generallibrary/src/main/java/com/dayu/general/adapter/CardListAdapter.kt
index 6b4e1ea..044ad98 100644
--- a/generallibrary/src/main/java/com/dayu/general/adapter/CardListAdapter.kt
+++ b/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鐨勮瘽锛屽彧寮曞叆涓�涓竷灞�锛屽氨鏄痚mptyView
+ // 閭d箞锛岃繖涓猺ecyclerView鐨刬temCount涓�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 ?: "鏃�"
}
}
- }
-}
\ No newline at end of file
+} }
\ No newline at end of file
--
Gitblit v1.8.0