From 731667db1ac658a6f6064ef328d04eb1d47c20ff Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期一, 31 三月 2025 13:53:02 +0800
Subject: [PATCH] fix 登录
---
app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt | 211 ++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 168 insertions(+), 43 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 230fb9c..481756d 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
@@ -8,6 +8,8 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.TextView
+import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
@@ -17,7 +19,10 @@
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.databinding.FragmentHomeBinding
+import com.example.firstapp.databinding.DialogCategorySelectorBinding
+import com.google.android.material.bottomsheet.BottomSheetDialog
class HomeFragment : Fragment() {
@@ -30,7 +35,9 @@
private lateinit var homeViewModel: HomeViewModel
private lateinit var expressAdapter: ExpressAdapter
private lateinit var financeAdapter: FinanceAdapter
-// private lateinit var memorialAdapter: MemorialAdapter
+ private lateinit var incomeAdapter: FinanceAdapter
+ private lateinit var flightAdapter: FinanceAdapter
+ private lateinit var trainAdapter: FinanceAdapter
private lateinit var dataUpdateReceiver: BroadcastReceiver
//onCreateView这个方法创建后被调用,通常是初始化视图组件和观察者
@@ -46,15 +53,18 @@
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- //通过 ViewModelProvider 获取 HomeViewModel 的实例,以便在视图中使用。
homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
- // 加载广告图片
- //loadAdvertisements()
+ // 假设从某处获取用户ID
+// val userId = getUserId() // 需要实现这个方法
+ val userId ="123456"
+ homeViewModel.initialize(requireContext(), userId)
+
//调用这个方法来设置 RecyclerView用于设置 RecyclerView 的布局和适配器。
setupRecyclerViews()
setupTabSwitching()
//调用这个方法来观察 ViewModel 中的数据变化
observeViewModelData()
+ setupCategorySelector()
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -107,13 +117,28 @@
startActivity(intent)
}
}
-//
-// // 纪念日列表
-// binding.memorialRecycler.apply {
-// layoutManager = LinearLayoutManager(context)
-// memorialAdapter = MemorialAdapter()
-// adapter = memorialAdapter
-// }
+
+ // 添加新的 RecyclerView
+ binding.incomeRecycler.apply {
+ layoutManager = LinearLayoutManager(context)
+ incomeAdapter = FinanceAdapter()
+ adapter = incomeAdapter
+ visibility = View.GONE
+ }
+
+ binding.flightRecycler.apply {
+ layoutManager = LinearLayoutManager(context)
+ flightAdapter = FinanceAdapter()
+ adapter = flightAdapter
+ visibility = View.GONE
+ }
+
+ binding.trainRecycler.apply {
+ layoutManager = LinearLayoutManager(context)
+ trainAdapter = FinanceAdapter()
+ adapter = trainAdapter
+ visibility = View.GONE
+ }
}
private fun setupTabSwitching() {
@@ -121,45 +146,63 @@
// 设置初始状态
tabExpress.setTextColor(ContextCompat.getColor(requireContext(), R.color.tab_selected))
tabFinance.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- others.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
-
+
// 快递标签点击事件
tabExpress.setOnClickListener {
+ hideAllRecyclers()
expressRecycler.visibility = View.VISIBLE
- financeRecycler.visibility = View.GONE
- tabExpress.setTextColor(ContextCompat.getColor(requireContext(), R.color.tab_selected))
- tabFinance.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- others.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- tabExpress.textSize = 16f
- tabFinance.textSize = 14f
- others.textSize = 14f
+ updateTabStyles(tabExpress)
+ homeViewModel.loadExpressData()
}
// 财务标签点击事件
tabFinance.setOnClickListener {
- expressRecycler.visibility = View.GONE
+ hideAllRecyclers()
financeRecycler.visibility = View.VISIBLE
- tabExpress.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- tabFinance.setTextColor(ContextCompat.getColor(requireContext(), R.color.tab_selected))
- others.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- tabExpress.textSize = 14f
- tabFinance.textSize = 16f
- others.textSize = 14f
-
- // 在切换到财务标签时加载数据 - 添加这行
+ updateTabStyles(tabFinance)
homeViewModel.loadFinanceData()
}
- // 其他标签点击事件
- others.setOnClickListener {
- expressRecycler.visibility = View.GONE
- financeRecycler.visibility = View.GONE
- tabExpress.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- tabFinance.setTextColor(ContextCompat.getColor(requireContext(), R.color.gray))
- others.setTextColor(ContextCompat.getColor(requireContext(), R.color.tab_selected))
- tabExpress.textSize = 14f
- tabFinance.textSize = 14f
- others.textSize = 16f
+ tabIncome.setOnClickListener {
+ hideAllRecyclers()
+ incomeRecycler.visibility = View.VISIBLE
+ updateTabStyles(tabIncome)
+ homeViewModel.loadIncomeData()
+ }
+
+ tabFlight.setOnClickListener {
+ hideAllRecyclers()
+ flightRecycler.visibility = View.VISIBLE
+ updateTabStyles(tabFlight)
+ homeViewModel.loadFlightData()
+ }
+
+ tabTrain.setOnClickListener {
+ hideAllRecyclers()
+ trainRecycler.visibility = View.VISIBLE
+ updateTabStyles(tabTrain)
+ homeViewModel.loadTrainData()
+ }
+ }
+ }
+
+ private fun hideAllRecyclers() {
+ binding.apply {
+ expressRecycler.visibility = View.GONE
+ financeRecycler.visibility = View.GONE
+ incomeRecycler.visibility = View.GONE
+ flightRecycler.visibility = View.GONE
+ trainRecycler.visibility = View.GONE
+ }
+ }
+
+ private fun updateTabStyles(selectedTab: TextView) {
+ binding.apply {
+ val tabs = listOf(tabExpress, tabFinance, tabIncome, tabFlight, tabTrain)
+ tabs.forEach { tab ->
+ tab.setTextColor(ContextCompat.getColor(requireContext(),
+ if (tab == selectedTab) R.color.tab_selected else R.color.gray))
+ tab.textSize = if (tab == selectedTab) 16f else 14f
}
}
}
@@ -175,10 +218,56 @@
homeViewModel.financeItems.observe(viewLifecycleOwner) { items ->
financeAdapter.submitList(items)
}
-//
-// homeViewModel.memorialItems.observe(viewLifecycleOwner) { items ->
-// memorialAdapter.submitList(items)
-// }
+
+ homeViewModel.incomeItems.observe(viewLifecycleOwner) { items ->
+ incomeAdapter.submitList(items)
+ }
+
+ homeViewModel.flightItems.observe(viewLifecycleOwner) { items ->
+ flightAdapter.submitList(items)
+ }
+
+ homeViewModel.trainItems.observe(viewLifecycleOwner) { items ->
+ trainAdapter.submitList(items)
+ }
+
+ // 观察可见分类的变化
+ homeViewModel.visibleCategories.observe(viewLifecycleOwner) { categories: List<String> ->
+ binding.apply {
+ // 隐藏所有标签
+ tabExpress.visibility = View.GONE
+ tabFinance.visibility = View.GONE
+ tabIncome.visibility = View.GONE
+ tabFlight.visibility = View.GONE
+ tabTrain.visibility = View.GONE
+
+ // 根据选中的分类显示对应的标签
+ categories.forEachIndexed { index: Int, categoryName: String ->
+ when (categoryName) {
+ "快递" -> {
+ tabExpress.visibility = View.VISIBLE
+ if (index == 0) tabExpress.performClick()
+ }
+ "还款" -> {
+ tabFinance.visibility = View.VISIBLE
+ if (index == 0) tabFinance.performClick()
+ }
+ "收入" -> {
+ tabIncome.visibility = View.VISIBLE
+ if (index == 0) tabIncome.performClick()
+ }
+ "航班" -> {
+ tabFlight.visibility = View.VISIBLE
+ if (index == 0) tabFlight.performClick()
+ }
+ "火车票" -> {
+ tabTrain.visibility = View.VISIBLE
+ if (index == 0) tabTrain.performClick()
+ }
+ }
+ }
+ }
+ }
}
override fun onResume() {
@@ -220,4 +309,40 @@
.load("http://192.168.1.235:9999/advertisement/down.png")
.into(binding.bottomAdBanner)
}
+
+ private fun setupCategorySelector() {
+ binding.categoryButton.setOnClickListener {
+ // TODO: 检查会员状态
+ if (true) { // 临时设置为true,实际应该检查会员状态
+ showCategorySelectorDialog()
+ } else {
+ // 显示会员提示
+ Toast.makeText(requireContext(), "该功能仅对会员开放", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ private fun showCategorySelectorDialog() {
+ val dialog = BottomSheetDialog(requireContext())
+ val dialogBinding = DialogCategorySelectorBinding.inflate(layoutInflater)
+ dialog.setContentView(dialogBinding.root)
+
+ val adapter = CategorySelectorAdapter()
+ dialogBinding.categoryRecyclerView.apply {
+ layoutManager = LinearLayoutManager(context)
+ this.adapter = adapter
+ }
+
+ // 加载现有分类
+ homeViewModel.categories.observe(viewLifecycleOwner) { categories ->
+ adapter.setCategories(categories)
+ }
+
+ dialogBinding.saveButton.setOnClickListener {
+ homeViewModel.saveCategories(adapter.getCategories())
+ dialog.dismiss()
+ }
+
+ dialog.show()
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3