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/activity/SearchUserActivity.kt | 185 ++++++++++++++++++++++++++++++++++++--------- 1 files changed, 146 insertions(+), 39 deletions(-) diff --git a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt index 1a655b0..b284cea 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt @@ -1,15 +1,19 @@ package com.dayu.general.activity 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.SearchListAdapter import com.dayu.general.bean.net.SearchUserResult import com.dayu.general.databinding.ActivitySearchUserGeBinding -import com.dayu.general.dialog.SearchDialog +import com.dayu.general.view.SearchDialog +import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse -import com.dayu.qiheonlinelibrary.net.ApiManager +import com.scwang.smart.refresh.layout.api.RefreshLayout +import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener /** * @author: zuo @@ -19,85 +23,181 @@ class SearchUserActivity : BaseActivity() { var binding: ActivitySearchUserGeBinding? = null + private var userAdapter: SearchListAdapter? = null + var searchDialog: SearchDialog? = null + + // 鍒嗛〉鐩稿叧鍙橀噺 + private var currentPage = 1 + private val pageSize = 20 + private var hasMoreData = true + + // 淇濆瓨褰撳墠鎼滅储鏉′欢 + private var currentFarmerId = "" + private var currentFarmerName = "" + private var currentCardNumber = "" + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySearchUserGeBinding.inflate(layoutInflater) setContentView(binding?.root) initView() + setupRecyclerView() + setupRefreshLayout() } fun initView() { + searchDialog = SearchDialog(this) + searchDialog?.show() binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() } + // 璁剧疆鎼滅储鐩戝惉鍣� + searchDialog?.setOnSearchListener(object : SearchDialog.OnSearchListener { + override fun onSearch(farmerId: String, farmerName: String, cardNumber: String) { + // 淇濆瓨褰撳墠鎼滅储鏉′欢 + currentFarmerId = farmerId + currentFarmerName = farmerName + currentCardNumber = cardNumber + + // 閲嶇疆鍒嗛〉鐘舵�� + currentPage = 1 + hasMoreData = true + + // 鎵ц鎼滅储 + searchUser(farmerId, farmerName, cardNumber, true) + } + }) binding?.titleBar?.setOnItemclickListner(ClickType_RIGHT_IMAGE) { // 鍒涘缓鎼滅储瀵硅瘽妗� - val searchDialog = SearchDialog(this) + // 鏄剧ず瀵硅瘽妗� + searchDialog?.show() + } + } - // 璁剧疆鎼滅储鐩戝惉鍣� - searchDialog.setOnSearchListener(object : SearchDialog.OnSearchListener { - override fun onSearch(farmerId: String, farmerName: String, cardNumber: String) { - // 澶勭悊鎼滅储缁撴灉 - // 杩欓噷鍙槸绀轰緥锛屽疄闄呭簲鐢ㄤ腑鍙兘闇�瑕佽皟鐢ˋPI鎴栨煡璇㈡暟鎹簱 - val message = - "鎼滅储鏉′欢锛歕n鍐滄埛缂栧彿锛�$farmerId\n鍐滄埛鍚嶇О锛�$farmerName\n鍗″彿锛�$cardNumber" - // 鎵ц瀹為檯鐨勬悳绱㈤�昏緫 - performSearch(farmerId, farmerName, cardNumber) + private fun setupRecyclerView() { + userAdapter = SearchListAdapter() + binding?.recyclerView?.apply { + layoutManager = LinearLayoutManager(this@SearchUserActivity) + adapter = userAdapter + } + + // 璁剧疆鍒楄〃椤圭偣鍑讳簨浠� + userAdapter?.setOnItemClickListener { user -> + // 澶勭悊鐢ㄦ埛鐐瑰嚮浜嬩欢 + ToastUtil.show("宸查�夋嫨鐢ㄦ埛锛�${user.name}") + // 杩欓噷鍙互娣诲姞璺宠浆鍒扮敤鎴疯鎯呴〉闈㈢殑閫昏緫 + // val intent = Intent(this, UserDetailActivity::class.java) + // intent.putExtra("userId", user.id) + // startActivity(intent) + } + } + + private fun setupRefreshLayout() { + binding?.refreshLayout?.apply { + // 璁剧疆鍒锋柊鍜屽姞杞芥洿澶氱洃鍚櫒 + setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener { + override fun onRefresh(refreshLayout: RefreshLayout) { + // 閲嶇疆椤电爜骞跺埛鏂版暟鎹� + currentPage = 1 + hasMoreData = true + searchUser(currentFarmerId, currentFarmerName, currentCardNumber, true) + } + + override fun onLoadMore(refreshLayout: RefreshLayout) { + // 濡傛灉杩樻湁鏇村鏁版嵁锛屽姞杞戒笅涓�椤� + if (hasMoreData) { + currentPage++ + searchUser(currentFarmerId, currentFarmerName, currentCardNumber, false) + } else { + // 瀹屾垚鍔犺浇骞舵彁绀烘病鏈夋洿澶氭暟鎹� + refreshLayout.finishLoadMore(500, true, false) + ToastUtil.show("娌℃湁鏇村鏁版嵁浜�") + } } }) - // 鏄剧ず瀵硅瘽妗� - searchDialog.show() } } /** - * 鎵ц鎼滅储閫昏緫 - * 杩欓噷鍙槸涓�涓ず渚嬫柟娉曪紝瀹為檯搴旂敤涓渶瑕佹牴鎹叿浣撻渶姹傚疄鐜� + * 鏍规嵁鍐滄皯ID銆佸鍚嶅拰閾惰鍗″彿鎼滅储鐢ㄦ埛 + * + * 姝ゅ嚱鏁版瀯寤轰竴涓弬鏁版槧灏勶紝鏍规嵁鎻愪緵鐨勫啘姘慖D銆佸鍚嶅拰閾惰鍗″彿鏉ユ悳绱㈢敤鎴� + * 瀹冧粎鍖呭惈鏈夋晥鐨勩�侀潪绌虹殑鎼滅储鍙傛暟锛屼互纭繚鎼滅储璇锋眰鐨勫噯纭�у拰鏁堢巼 + * + * @param farmerId 鍐滄皯鐨勫敮涓�鏍囪瘑绗� + * @param farmerName 鍐滄皯鐨勫鍚� + * @param cardNumber 閾惰鍗″彿 + * @param isRefresh 鏄惁涓哄埛鏂版搷浣� */ - private fun performSearch(farmerId: String, farmerName: String, cardNumber: String) { - // 璋冪敤瀹為檯鐨勬悳绱PI - searchUser(farmerId, farmerName, cardNumber) - } + private fun searchUser(farmerId: String, farmerName: String, cardNumber: String, isRefresh: Boolean = true) { + val map = mutableMapOf<String, Any>() - private fun searchUser(farmerId: String, farmerName: String, cardNumber: String) { - val map = mutableMapOf<String, String>() - if (farmerId.isNotEmpty()) { - map["farmerId"] = farmerId + map["clientNum"] = farmerId } - + if (farmerName.isNotEmpty()) { - map["farmerName"] = farmerName + map["name"] = farmerName + } + + if (cardNumber.isNotEmpty()) { + map["cardNum"] = cardNumber } - if (cardNumber.isNotEmpty()) { - map["cardNumber"] = cardNumber - } + // 娣诲姞鍒嗛〉鍙傛暟 + map["pageCurr"] = currentPage + map["pageSize"] = pageSize // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� ApiManager.getInstance().requestGetLoading( this, - "searchUser", + "sell/client/get", SearchUserResult::class.java, map, object : SubscriberListener<BaseResponse<SearchUserResult>>() { override fun onNext(t: BaseResponse<SearchUserResult>) { + // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣� + finishRefreshOrLoad(isRefresh) + if (t.success) { // 澶勭悊鎼滅储鎴愬姛鐨勬儏鍐� val result = t.content if (result != null) { // 澶勭悊鎼滅储缁撴灉 - handleSearchResult(result) + if (result.obj.isNotEmpty()) { + // 鏍规嵁鏄惁涓哄埛鏂版搷浣滃喅瀹氬浣曟洿鏂版暟鎹� + if (isRefresh) { + userAdapter?.setData(result.obj) + } else { + userAdapter?.addData(result.obj) + } + + // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁锛氭牴鎹綋鍓嶉〉鐮佸拰鎬婚〉鏁板垽鏂� + hasMoreData = currentPage < result.pageTotal + } else { + if (isRefresh) { + userAdapter?.setData(emptyList()) + ToastUtil.show("鏈壘鍒板尮閰嶇殑鐢ㄦ埛") + } else { + hasMoreData = false + ToastUtil.show("娌℃湁鏇村鏁版嵁浜�") + } + } } else { - ToastUtil.show("鏈壘鍒板尮閰嶇殑鐢ㄦ埛") + if (isRefresh) { + userAdapter?.setData(emptyList()) + ToastUtil.show("鏈壘鍒板尮閰嶇殑鐢ㄦ埛") + } } } else { // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� ToastUtil.show(t.msg) } } - + override fun onError(e: Throwable?) { super.onError(e) + // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣� + finishRefreshOrLoad(isRefresh) ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}") } } @@ -105,12 +205,19 @@ } /** - * 澶勭悊鎼滅储缁撴灉 + * 瀹屾垚鍒锋柊鎴栧姞杞芥搷浣� + * @param isRefresh 鏄惁涓哄埛鏂版搷浣� */ - private fun handleSearchResult(result: SearchUserResult) { - // 鍦ㄨ繖閲屽疄鐜版悳绱㈢粨鏋滅殑澶勭悊閫昏緫 - // 渚嬪锛氭洿鏂癠I鏄剧ず鎼滅储缁撴灉鍒楄〃 - // 鎴栬�呰烦杞埌缁撴灉璇︽儏椤甸潰 + private fun finishRefreshOrLoad(isRefresh: Boolean) { + if (isRefresh) { + binding?.refreshLayout?.finishRefresh(true) + } else { + binding?.refreshLayout?.finishLoadMore(true) + } } -} \ No newline at end of file + /** + * 澶勭悊鎼滅储缁撴灉 + */ + +} -- Gitblit v1.8.0