From 1831c2a6304496729fc16af624c37e299beae83e Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期二, 01 四月 2025 11:36:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt | 116 ++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 81 insertions(+), 35 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt b/app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt
index 72b4b45..0841d30 100644
--- a/app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt
@@ -17,13 +17,17 @@
import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.example.firstapp.R
+import com.example.firstapp.activity.ContentDetailActivity
import com.example.firstapp.activity.PickupActivity
import com.example.firstapp.adapter.ExpressAdapter
import com.example.firstapp.adapter.FinanceAdapter
import com.example.firstapp.adapter.CategorySelectorAdapter
+import com.example.firstapp.adapter.IncomeAdapter
import com.example.firstapp.database.service.RetrofitClient
import com.example.firstapp.databinding.FragmentHomeBinding
import com.example.firstapp.databinding.DialogCategorySelectorBinding
+import com.example.firstapp.model.IncomeGroup
+import com.example.firstapp.model.IncomePackage
import com.example.firstapp.utils.PreferencesManager
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.coroutines.launch
@@ -39,7 +43,7 @@
private lateinit var homeViewModel: HomeViewModel
private lateinit var expressAdapter: ExpressAdapter
private lateinit var financeAdapter: FinanceAdapter
- private lateinit var incomeAdapter: FinanceAdapter
+ private lateinit var incomeAdapter: IncomeAdapter
private lateinit var flightAdapter: FinanceAdapter
private lateinit var trainAdapter: FinanceAdapter
private lateinit var dataUpdateReceiver: BroadcastReceiver
@@ -62,12 +66,11 @@
// val userId = getUserId() // 需要实现这个方法
val userId ="123456"
homeViewModel.initialize(requireContext(), userId)
-
- //调用这个方法来设置 RecyclerView用于设置 RecyclerView 的布局和适配器。
- setupRecyclerViews()
+
+ // 设置点击监听事件
+ setupAdapters()
setupTabSwitching()
- //调用这个方法来观察 ViewModel 中的数据变化
- observeViewModelData()
+ setupObservers()
setupCategorySelector()
}
@@ -85,7 +88,7 @@
}
}
- private fun setupRecyclerViews() {
+ private fun setupAdapters() {
binding.expressRecycler.apply {
layoutManager = LinearLayoutManager(context)
expressAdapter = ExpressAdapter()
@@ -97,6 +100,7 @@
val intent = Intent(requireContext(), PickupActivity::class.java).apply {
putExtra("station_name", group.stationName)
putExtra("company", pack.company)
+ putExtra("page_type", PickupActivity.TYPE_EXPRESS)
}
startActivity(intent)
}
@@ -117,6 +121,8 @@
val intent = Intent(requireContext(), PickupActivity::class.java).apply {
putExtra("station_name", group.stationName)
putExtra("company", pack.company)
+ putExtra("page_type", PickupActivity.TYPE_REPAYMENT)
+
}
startActivity(intent)
}
@@ -125,9 +131,22 @@
// 添加新的 RecyclerView
binding.incomeRecycler.apply {
layoutManager = LinearLayoutManager(context)
- incomeAdapter = FinanceAdapter()
+ incomeAdapter = IncomeAdapter()
adapter = incomeAdapter
- visibility = View.GONE
+
+ // 设置初始状态 - 添加这行
+ binding.incomeRecycler.visibility = View.GONE
+
+ // 设置点击监听
+ incomeAdapter.setOnPackageClickListener { group, pack ->
+ // 跳转到取件页面
+ val intent = Intent(requireContext(), PickupActivity::class.java).apply {
+ putExtra("station_name", group.stationName)
+ putExtra("company", pack.company)
+ putExtra("page_type", PickupActivity.TYPE_INCOME)
+ }
+ startActivity(intent)
+ }
}
binding.flightRecycler.apply {
@@ -151,7 +170,7 @@
tabExpress.setTextColor(ContextCompat.getColor(requireContext(), R.color.tab_selected))
tabFinance.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- // 快递标签点击事件
+ // 快递标签点击事件 - 快递功能所有用户都可以使用
tabExpress.setOnClickListener {
hideAllRecyclers()
expressRecycler.visibility = View.VISIBLE
@@ -159,33 +178,60 @@
homeViewModel.loadExpressData()
}
- // 财务标签点击事件
- tabFinance.setOnClickListener {
- hideAllRecyclers()
- financeRecycler.visibility = View.VISIBLE
- updateTabStyles(tabFinance)
- homeViewModel.loadFinanceData()
- }
+ // 其他标签点击事件需要检查会员状态
+ val memberOnlyTabs = mapOf(
+ tabFinance to { homeViewModel.loadFinanceData() },
+ tabIncome to { homeViewModel.loadIncomeData() },
+ tabFlight to { homeViewModel.loadFlightData() },
+ tabTrain to { homeViewModel.loadTrainData() }
+ )
- tabIncome.setOnClickListener {
- hideAllRecyclers()
- incomeRecycler.visibility = View.VISIBLE
- updateTabStyles(tabIncome)
- homeViewModel.loadIncomeData()
+ memberOnlyTabs.forEach { (tab, loadAction) ->
+ tab.setOnClickListener {
+ checkMembershipAndExecute(tab) {
+ hideAllRecyclers()
+ when (tab) {
+ tabFinance -> financeRecycler.visibility = View.VISIBLE
+ tabIncome -> incomeRecycler.visibility = View.VISIBLE
+ tabFlight -> flightRecycler.visibility = View.VISIBLE
+ tabTrain -> trainRecycler.visibility = View.VISIBLE
+ }
+ updateTabStyles(tab)
+ loadAction()
+ }
+ }
}
+ }
+ }
- tabFlight.setOnClickListener {
- hideAllRecyclers()
- flightRecycler.visibility = View.VISIBLE
- updateTabStyles(tabFlight)
- homeViewModel.loadFlightData()
- }
+ private fun checkMembershipAndExecute(tab: TextView, action: () -> Unit) {
+ // 从本地获取保存的手机号
+ val savedPhone = PreferencesManager.getPhone()
+ if (savedPhone.isNullOrEmpty()) {
+ Toast.makeText(requireContext(), "请先登录", Toast.LENGTH_SHORT).show()
+ return
+ }
- tabTrain.setOnClickListener {
- hideAllRecyclers()
- trainRecycler.visibility = View.VISIBLE
- updateTabStyles(tabTrain)
- homeViewModel.loadTrainData()
+ // 使用协程检查会员状态
+ lifecycleScope.launch {
+ try {
+ val response = RetrofitClient.apiService.getUserInfo(savedPhone)
+ if (response.code == "0" && response.data != null) {
+ if (response.data.isMember) {
+ action()
+ } else {
+ Toast.makeText(requireContext(), "该功能仅对会员开放", Toast.LENGTH_SHORT).show()
+ // 切回快递标签
+ binding.tabExpress.performClick()
+ }
+ } else {
+ Toast.makeText(requireContext(), "获取用户信息失败", Toast.LENGTH_SHORT).show()
+ binding.tabExpress.performClick()
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ Toast.makeText(requireContext(), "网络错误,请稍后重试", Toast.LENGTH_SHORT).show()
+ binding.tabExpress.performClick()
}
}
}
@@ -211,8 +257,7 @@
}
}
- //这个方法用于观察 homeViewModel 中的 expressItems 数据。
- private fun observeViewModelData() {
+ private fun setupObservers() {
//当 expressItems 数据发生变化时,更新 RecyclerView 的数据。
homeViewModel.expressItems.observe(viewLifecycleOwner) { items ->
//将新的数据列表提交给适配器,以更新 RecyclerView 的显示内容。
@@ -223,6 +268,7 @@
financeAdapter.submitList(items)
}
+ // 观察收入数据变化
homeViewModel.incomeItems.observe(viewLifecycleOwner) { items ->
incomeAdapter.submitList(items)
}
--
Gitblit v1.9.3