From bd4891e2fd6b773cbb0ec387f6db4bc944fdf51a Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 31 三月 2025 18:07:51 +0800
Subject: [PATCH] feat(generallibrary): 添加卡片列表功能并优化登录逻辑
---
generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt | 4
generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt | 2
app/src/main/AndroidManifest.xml | 5
generallibrary/src/main/java/com/dayu/general/view/CardSearchDialog.kt | 74 ++++++
generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt | 18 +
app/src/main/java/com/dayu/recharge/MyApplication.java | 3
generallibrary/src/main/res/layout/dialog_card_search.xml | 142 ++++++++++++
generallibrary/src/main/res/layout/activity_card_list.xml | 45 ++++
baselibrary/src/main/res/layout/confirm_dialog.xml | 4
generallibrary/src/main/AndroidManifest.xml | 1
generallibrary/src/main/res/layout/item_card_list.xml | 104 +++++++++
generallibrary/src/main/res/values/colors.xml | 1
generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt | 209 ++++++++++++++++++
app/build.gradle | 2
14 files changed, 599 insertions(+), 15 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index cd537e8..6a96054 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,7 @@
android {
signingConfigs {
debug {
- storeFile file(myValue)
+ storeFile file("${project.rootDir}/dycz.jks")
storePassword 'dycz@2023'
keyAlias 'dayu'
keyPassword 'dycz@2023'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7d52f81..c0de339 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,6 +48,11 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+ <!-- 娣诲姞鑷畾涔塧ction鐨刬ntent-filter锛岀敤浜庝粠generallibrary涓惎鍔ㄦActivity -->
+ <intent-filter>
+ <action android:name="com.dayu.recharge.action.LOGIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
</activity>
<meta-data
android:name="BUGLY_APP_VERSION"
diff --git a/app/src/main/java/com/dayu/recharge/MyApplication.java b/app/src/main/java/com/dayu/recharge/MyApplication.java
index 1aa6969..0aa434c 100644
--- a/app/src/main/java/com/dayu/recharge/MyApplication.java
+++ b/app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -1,6 +1,5 @@
package com.dayu.recharge;
-import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
@@ -41,6 +40,7 @@
} catch (Exception e) {
e.printStackTrace();
}
+
initApplication();
BaseApplication.getInstance().onCreat(this);
CrashReport.initCrashReport(getApplicationContext(), "45551598b8", true);
@@ -70,6 +70,7 @@
break;
case BaseCommon.Generalv1Library:
com.dayu.general.BaseApplication.getInstance(this);
+ BusinessProvider.getInstance(this);
break;
}
}
diff --git a/baselibrary/src/main/res/layout/confirm_dialog.xml b/baselibrary/src/main/res/layout/confirm_dialog.xml
index 109888b..32e0b2a 100644
--- a/baselibrary/src/main/res/layout/confirm_dialog.xml
+++ b/baselibrary/src/main/res/layout/confirm_dialog.xml
@@ -42,7 +42,7 @@
<View
android:layout_width="match_parent"
- android:layout_height="2px"
+ android:layout_height="1dp"
android:layout_marginTop="20dp"
android:background="@color/line_bg" />
@@ -64,7 +64,7 @@
android:textSize="20sp" />
<View
- android:layout_width="2px"
+ android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/line_bg" />
diff --git a/generallibrary/src/main/AndroidManifest.xml b/generallibrary/src/main/AndroidManifest.xml
index 99e8411..32912b8 100644
--- a/generallibrary/src/main/AndroidManifest.xml
+++ b/generallibrary/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
+ <activity android:name=".activity.CardListActivity"/>
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
index b89fecf..2a5ad7c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
@@ -43,7 +43,7 @@
startActivity(intent)
}
binding?.homeLossLL?.setOnClickListener {
- val intent = Intent(context, SearchUserActivity::class.java).apply{
+ val intent = Intent(context, CardListActivity::class.java).apply{
putExtra("type", "loss")
}
startActivity(intent)
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
index bfd1ded..43874cd 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
@@ -1,9 +1,216 @@
package com.dayu.general.activity
-class CardListActivity:BaseActivity() {
+import android.os.Bundle
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.utils.ToastUtil
+import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
+import com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_IMAGE
+import com.dayu.general.adapter.CardListAdapter
+import com.dayu.general.bean.net.SearchCardResult
+import com.dayu.general.databinding.ActivityCardListBinding
+import com.dayu.general.view.CardSearchDialog
+import com.dayu.general.net.ApiManager
+import com.dayu.general.net.BaseResponse
+import com.scwang.smart.refresh.layout.api.RefreshLayout
+import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
+/**
+ * @author: zuo
+ * @date: 2023/3/31
+ * @description: 鍗$墖鍒楄〃鐣岄潰
+ */
+class CardListActivity : BaseActivity() {
+ var binding: ActivityCardListBinding? = null
+ private var cardAdapter: CardListAdapter? = null
+ var searchDialog: CardSearchDialog? = null
+
+ // 鍒嗛〉鐩稿叧鍙橀噺
+ private var currentPage = 1
+ private val pageSize = 20
+ private var hasMoreData = true
+
+ // 淇濆瓨褰撳墠鎼滅储鏉′欢
+ private var currentCardNumber = ""
+ private var currentClientNumber = ""
+ private var currentClientName = ""
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityCardListBinding.inflate(layoutInflater)
+ setContentView(binding?.root)
+ initView()
+ setupRecyclerView()
+ setupRefreshLayout()
+ }
+ fun initView() {
+ searchDialog = CardSearchDialog(this)
+ searchDialog?.show()
+ binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+ // 璁剧疆鎼滅储鐩戝惉鍣�
+ searchDialog?.setOnSearchListener(object : CardSearchDialog.OnSearchListener {
+ override fun onSearch(cardNumber: String, clientNumber: String, clientName: String) {
+ // 淇濆瓨褰撳墠鎼滅储鏉′欢
+ currentCardNumber = cardNumber
+ currentClientNumber = clientNumber
+ currentClientName = clientName
+
+ // 閲嶇疆鍒嗛〉鐘舵��
+ currentPage = 1
+ hasMoreData = true
+
+ // 鎵ц鎼滅储
+ searchCards(cardNumber, clientNumber, clientName, true)
+ }
+ })
+ binding?.titleBar?.setOnItemclickListner(ClickType_RIGHT_IMAGE) {
+ // 鏄剧ず鎼滅储瀵硅瘽妗�
+ searchDialog?.show()
+ }
+ }
+ private fun setupRecyclerView() {
+ cardAdapter = CardListAdapter()
+ binding?.recyclerView?.apply {
+ layoutManager = LinearLayoutManager(this@CardListActivity)
+ adapter = cardAdapter
+ }
+
+ // 璁剧疆鍒楄〃椤圭偣鍑讳簨浠�
+ cardAdapter?.setOnItemClickListener { card ->
+ // 澶勭悊鍗$墖鐐瑰嚮浜嬩欢
+ ToastUtil.show("宸查�夋嫨鍗$墖锛�${card.cardNum}")
+ // 杩欓噷鍙互娣诲姞璺宠浆鍒板崱鐗囪鎯呴〉闈㈢殑閫昏緫
+ // val intent = Intent(this, CardDetailActivity::class.java)
+ // intent.putExtra("cardNum", card.cardNum)
+ // startActivity(intent)
+ }
+ }
+
+ private fun setupRefreshLayout() {
+ binding?.refreshLayout?.apply {
+ // 璁剧疆鍒锋柊鍜屽姞杞芥洿澶氱洃鍚櫒
+ setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
+ override fun onRefresh(refreshLayout: RefreshLayout) {
+ // 閲嶇疆椤电爜骞跺埛鏂版暟鎹�
+ currentPage = 1
+ hasMoreData = true
+ searchCards(currentCardNumber, currentClientNumber, currentClientName, true)
+ }
+
+ override fun onLoadMore(refreshLayout: RefreshLayout) {
+ // 濡傛灉杩樻湁鏇村鏁版嵁锛屽姞杞戒笅涓�椤�
+ if (hasMoreData) {
+ currentPage++
+ searchCards(currentCardNumber, currentClientNumber, currentClientName, false)
+ } else {
+ // 瀹屾垚鍔犺浇骞舵彁绀烘病鏈夋洿澶氭暟鎹�
+ refreshLayout.finishLoadMore(500, true, false)
+ ToastUtil.show("娌℃湁鏇村鏁版嵁浜�")
+ }
+ }
+ })
+ }
+ }
+
+ /**
+ * 鏍规嵁鍗″彿銆佸鎴风紪鍙峰拰瀹㈡埛濮撳悕鎼滅储鍗$墖
+ *
+ * 姝ゅ嚱鏁版瀯寤轰竴涓弬鏁版槧灏勶紝鏍规嵁鎻愪緵鐨勫崱鍙枫�佸鎴风紪鍙峰拰瀹㈡埛濮撳悕鏉ユ悳绱㈠崱鐗�
+ * 瀹冧粎鍖呭惈鏈夋晥鐨勩�侀潪绌虹殑鎼滅储鍙傛暟锛屼互纭繚鎼滅储璇锋眰鐨勫噯纭�у拰鏁堢巼
+ *
+ * @param cardNumber 鍗″彿
+ * @param clientNumber 瀹㈡埛缂栧彿
+ * @param clientName 瀹㈡埛濮撳悕
+ * @param isRefresh 鏄惁涓哄埛鏂版搷浣�
+ */
+ private fun searchCards(cardNumber: String, clientNumber: String, clientName: String, isRefresh: Boolean = true) {
+ val map = mutableMapOf<String, Any>()
+
+ if (cardNumber.isNotEmpty()) {
+ map["cardNum"] = cardNumber
+ }
+
+ if (clientNumber.isNotEmpty()) {
+ map["clientNum"] = clientNumber
+ }
+
+ if (clientName.isNotEmpty()) {
+ map["clientName"] = clientName
+ }
+
+ // 娣诲姞鍒嗛〉鍙傛暟
+ map["pageCurr"] = currentPage
+ map["pageSize"] = pageSize
+
+ // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "sell/clientcard/getcards",
+ SearchCardResult::class.java,
+ map,
+ object : SubscriberListener<BaseResponse<SearchCardResult>>() {
+ override fun onNext(t: BaseResponse<SearchCardResult>) {
+ // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣�
+ finishRefreshOrLoad(isRefresh)
+
+ if (t.success) {
+ // 澶勭悊鎼滅储鎴愬姛鐨勬儏鍐�
+ val result = t.content
+ if (result != null) {
+ // 澶勭悊鎼滅储缁撴灉
+ if (result.obj.isNotEmpty()) {
+ // 鏍规嵁鏄惁涓哄埛鏂版搷浣滃喅瀹氬浣曟洿鏂版暟鎹�
+ if (isRefresh) {
+ cardAdapter?.setData(result.obj)
+ } else {
+ cardAdapter?.addData(result.obj)
+ }
+
+ // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁锛氭牴鎹綋鍓嶉〉鐮佸拰鎬婚〉鏁板垽鏂�
+ hasMoreData = currentPage < result.pageTotal
+ } else {
+ if (isRefresh) {
+ cardAdapter?.setData(emptyList())
+ ToastUtil.show("鏈壘鍒板尮閰嶇殑鍗$墖")
+ } else {
+ hasMoreData = false
+ ToastUtil.show("娌℃湁鏇村鏁版嵁浜�")
+ }
+ }
+ } else {
+ if (isRefresh) {
+ cardAdapter?.setData(emptyList())
+ ToastUtil.show("鏈壘鍒板尮閰嶇殑鍗$墖")
+ }
+ }
+ } else {
+ // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
+ ToastUtil.show(t.msg)
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣�
+ finishRefreshOrLoad(isRefresh)
+ ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+ }
+ }
+ )
+ }
+
+ /**
+ * 瀹屾垚鍒锋柊鎴栧姞杞芥搷浣�
+ * @param isRefresh 鏄惁涓哄埛鏂版搷浣�
+ */
+ private fun finishRefreshOrLoad(isRefresh: Boolean) {
+ if (isRefresh) {
+ binding?.refreshLayout?.finishRefresh(true)
+ } else {
+ binding?.refreshLayout?.finishLoadMore(true)
+ }
+ }
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt
index bb3bf41..0276426 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/MyFragment.kt
@@ -1,11 +1,12 @@
package com.dayu.general.activity
-import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
+import com.dayu.baselibrary.business.BusinessProvider
+import com.dayu.baselibrary.view.ConfirmDialog
import com.dayu.general.BaseApplication
import com.dayu.general.databinding.FragmentMyBinding
@@ -18,7 +19,10 @@
): View? {
binding = FragmentMyBinding.inflate(inflater, container, false)
binding?.logoutRL?.setOnClickListener {
- logout()
+ ConfirmDialog(requireContext(), "鎻愮ず", "纭畾瑕侀��鍑虹櫥褰曞悧锛�") {
+ logout()
+ }.show()
+
}
return binding?.root
}
@@ -51,10 +55,10 @@
binding?.myName?.text = "鏈櫥褰�"
binding?.myPhone?.text = "鏈櫥褰�"
binding?.myAdName?.text = "鏈櫥褰�"
- var intent= Intent(activity,LoginActivity::class.java)
- startActivity(intent)
- activity?.finish()
+
+ // 浣跨敤璺敱绠$悊鍣ㄨ烦杞埌鐧诲綍椤甸潰
+ context?.let {
+ BusinessProvider.getBusinessProvider().startLoginNavigotor.navigateToLogin(context)
+ }
}
-
-
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
index 8e10e79..42a877f 100644
--- a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
+++ b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
@@ -7,8 +7,8 @@
*/
class NetConstans {
companion object {
-// const val BASE_URL: String = "https://no253541tf71.vicp.fun/"
- const val BASE_URL: String = "http://192.168.40.166:54321/"
+ const val BASE_URL: String = "https://no253541tf71.vicp.fun/"
+// const val BASE_URL: String = "http://192.168.40.166:54321/"
const val TOKEN_INVALID: String = "0000"
}
diff --git a/generallibrary/src/main/java/com/dayu/general/view/CardSearchDialog.kt b/generallibrary/src/main/java/com/dayu/general/view/CardSearchDialog.kt
new file mode 100644
index 0000000..cf0d808
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/view/CardSearchDialog.kt
@@ -0,0 +1,74 @@
+package com.dayu.general.view
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.dayu.general.databinding.DialogCardSearchBinding
+
+/**
+ * 鍗$墖鎼滅储瀵硅瘽妗�
+ * 鐢ㄤ簬鎼滅储鍗″彿銆佸鎴风紪鍙枫�佸鎴峰鍚�
+ */
+class CardSearchDialog(context: Context) : Dialog(context) {
+
+ private lateinit var binding: DialogCardSearchBinding
+ private var onSearchListener: OnSearchListener? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = DialogCardSearchBinding.inflate(LayoutInflater.from(context))
+ setContentView(binding.root)
+
+ // 璁剧疆瀵硅瘽妗嗗搴︿负灞忓箷瀹藉害鐨�85%
+ window?.apply {
+ val params = attributes
+ params.width = (context.resources.displayMetrics.widthPixels * 0.85).toInt()
+ params.height = ViewGroup.LayoutParams.WRAP_CONTENT
+ params.gravity = Gravity.CENTER
+ attributes = params
+ setBackgroundDrawableResource(android.R.color.transparent)
+ }
+
+ // 璁剧疆鐐瑰嚮澶栭儴涓嶅彇娑堝璇濇
+ setCanceledOnTouchOutside(false)
+
+ // 璁剧疆鎼滅储鎸夐挳鐐瑰嚮浜嬩欢
+ binding.btnSearch.setOnClickListener {
+ val cardNumber = binding.etCardNumber.text.toString().trim()
+ val clientNumber = binding.etClientNumber.text.toString().trim()
+ val clientName = binding.etClientName.text.toString().trim()
+
+ // 鍥炶皟鎼滅储浜嬩欢
+ onSearchListener?.onSearch(cardNumber, clientNumber, clientName)
+ dismiss()
+ }
+
+ // 璁剧疆鍙栨秷鎸夐挳鐐瑰嚮浜嬩欢
+ binding.tvCancel.setOnClickListener {
+ dismiss()
+ }
+ }
+
+ /**
+ * 璁剧疆鎼滅储鐩戝惉鍣�
+ */
+ fun setOnSearchListener(listener: OnSearchListener) {
+ this.onSearchListener = listener
+ }
+
+ /**
+ * 鎼滅储鐩戝惉鍣ㄦ帴鍙�
+ */
+ interface OnSearchListener {
+ /**
+ * 鎼滅储鍥炶皟鏂规硶
+ * @param cardNumber 鍗″彿
+ * @param clientNumber 瀹㈡埛缂栧彿
+ * @param clientName 瀹㈡埛濮撳悕
+ */
+ fun onSearch(cardNumber: String, clientNumber: String, clientName: String)
+ }
+}
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_card_list.xml b/generallibrary/src/main/res/layout/activity_card_list.xml
new file mode 100644
index 0000000..5a14bb8
--- /dev/null
+++ b/generallibrary/src/main/res/layout/activity_card_list.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".activity.CardListActivity">
+
+ <com.dayu.baselibrary.view.TitleBar
+ android:id="@+id/title_bar"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dimen_title_height"
+ app:centerText="鍗$墖鍒楄〃"
+ app:layout_constraintTop_toTopOf="parent"
+ app:leftImage="@mipmap/icon_back"
+ app:rightImage="@mipmap/icon_search" />
+
+ <com.scwang.smart.refresh.layout.SmartRefreshLayout
+ android:id="@+id/refresh_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:srlAccentColor="@color/colorPrimary"
+ app:srlEnablePreviewInEditMode="true">
+
+ <com.scwang.smart.refresh.header.ClassicsHeader
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/recycler_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:clipToPadding="false"
+ android:overScrollMode="never" />
+
+ <com.scwang.smart.refresh.footer.ClassicsFooter
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/dialog_card_search.xml b/generallibrary/src/main/res/layout/dialog_card_search.xml
new file mode 100644
index 0000000..840da8d
--- /dev/null
+++ b/generallibrary/src/main/res/layout/dialog_card_search.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/search_dialog_bg"
+ android:padding="20dp">
+
+ <TextView
+ android:id="@+id/tv_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="鍗$墖鎼滅储"
+ android:textColor="@color/black"
+ android:textSize="20sp"
+ android:textStyle="bold"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <View
+ android:id="@+id/divider"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginTop="12dp"
+ android:background="#E0E0E0"
+ app:layout_constraintTop_toBottomOf="@id/tv_title" />
+
+ <TextView
+ android:id="@+id/tv_card_number_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:text="鍗″彿"
+ android:textColor="#666666"
+ android:textSize="14sp"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/divider" />
+
+ <EditText
+ android:id="@+id/et_card_number"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="6dp"
+ android:background="@drawable/edit_text_bg"
+ android:hint="璇疯緭鍏ュ崱鍙�"
+ android:inputType="text"
+ android:singleLine="true"
+ android:textColorHint="#BBBBBB"
+ android:textSize="15sp"
+ app:layout_constraintTop_toBottomOf="@id/tv_card_number_label" />
+
+ <TextView
+ android:id="@+id/tv_client_number_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="14dp"
+ android:text="瀹㈡埛缂栧彿"
+ android:textColor="#666666"
+ android:textSize="14sp"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/et_card_number" />
+
+ <EditText
+ android:id="@+id/et_client_number"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="6dp"
+ android:background="@drawable/edit_text_bg"
+ android:hint="璇疯緭鍏ュ鎴风紪鍙�"
+ android:inputType="text"
+ android:singleLine="true"
+ android:textColorHint="#BBBBBB"
+ android:textSize="15sp"
+ app:layout_constraintTop_toBottomOf="@id/tv_client_number_label" />
+
+ <TextView
+ android:id="@+id/tv_client_name_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="14dp"
+ android:text="瀹㈡埛濮撳悕"
+ android:textColor="#666666"
+ android:textSize="14sp"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/et_client_number" />
+
+ <EditText
+ android:id="@+id/et_client_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="6dp"
+ android:background="@drawable/edit_text_bg"
+ android:hint="璇疯緭鍏ュ鎴峰鍚�"
+ android:inputType="text"
+ android:singleLine="true"
+ android:textColorHint="#BBBBBB"
+ android:textSize="15sp"
+ app:layout_constraintTop_toBottomOf="@id/tv_client_name_label" />
+
+ <Button
+ android:id="@+id/tv_cancel"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="24dp"
+ android:layout_marginEnd="6dp"
+ android:background="@drawable/cancel_button_ripple"
+ android:clickable="true"
+ android:focusable="true"
+ android:paddingTop="10dp"
+ android:paddingBottom="10dp"
+ android:stateListAnimator="@null"
+ android:text="鍙栨秷"
+ android:textColor="#666666"
+ android:textSize="15sp"
+ app:layout_constraintEnd_toStartOf="@id/btn_search"
+ app:layout_constraintHorizontal_chainStyle="packed"
+ app:layout_constraintHorizontal_weight="1"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/et_client_name" />
+
+ <Button
+ android:id="@+id/btn_search"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="6dp"
+ android:background="@drawable/search_button_ripple"
+ android:clickable="true"
+ android:elevation="2dp"
+ android:focusable="true"
+ android:paddingTop="12dp"
+ android:paddingBottom="12dp"
+ android:stateListAnimator="@null"
+ android:text="鎼滅储"
+ android:textColor="@android:color/white"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ app:layout_constraintBaseline_toBaselineOf="@id/tv_cancel"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_weight="1"
+ app:layout_constraintStart_toEndOf="@id/tv_cancel" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/item_card_list.xml b/generallibrary/src/main/res/layout/item_card_list.xml
new file mode 100644
index 0000000..c470e47
--- /dev/null
+++ b/generallibrary/src/main/res/layout/item_card_list.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="12dp"
+ android:layout_marginVertical="6dp"
+ app:cardCornerRadius="8dp"
+ app:cardElevation="2dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="12dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/tv_card_number"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="鍗″彿锛�5323281010060000"
+ android:textColor="@color/black"
+ android:textSize="16sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/tv_card_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="鐘舵�侊細姝e父"
+ android:textColor="@color/green"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/tv_card_type"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="鍗$被鍨嬶細鍐滄埛鍗�"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_card_balance"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="浣欓锛�90.97 鍏�"
+ android:textColor="@color/black"
+ android:textSize="14sp"
+ android:textStyle="bold" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/tv_client_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="濮撳悕锛氭潕鍥�"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_client_num"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="瀹㈡埛缂栧彿锛�281010060002"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_phone"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="鐢佃瘽锛�156****4561"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_id_card"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="韬唤璇侊細3402****1245"
+ android:textColor="@color/black"
+ android:textSize="14sp"
+ android:visibility="visible" />
+
+ </LinearLayout>
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/generallibrary/src/main/res/values/colors.xml b/generallibrary/src/main/res/values/colors.xml
index 5729a42..b812742 100644
--- a/generallibrary/src/main/res/values/colors.xml
+++ b/generallibrary/src/main/res/values/colors.xml
@@ -5,5 +5,6 @@
<color name="white">#fff</color>
<color name="nav_item_color">#555555</color>
<color name="base_list_bg">#e6e6e6</color>
+ <color name="green">#32CD32</color>
</resources>
\ No newline at end of file
--
Gitblit v1.8.0