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