From d0a0e8e242e293ad35dfbee1217f1103302818cd Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期四, 03 四月 2025 10:22:48 +0800
Subject: [PATCH] refactor(generallibrary):重构卡片和用户搜索功能

---
 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