From 4e0525287189ead2b40d86cde62d96890db1389b Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期一, 31 三月 2025 09:02:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt | 229 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 182 insertions(+), 47 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 ac27547..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
@@ -9,17 +9,20 @@
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
import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
import com.example.firstapp.R
import com.example.firstapp.activity.PickupActivity
import com.example.firstapp.adapter.ExpressAdapter
import com.example.firstapp.adapter.FinanceAdapter
-import com.example.firstapp.core.Core
+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() {
@@ -32,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这个方法创建后被调用,通常是初始化视图组件和观察者
@@ -48,14 +53,18 @@
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- //通过 ViewModelProvider 获取 HomeViewModel 的实例,以便在视图中使用。
homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
-
+ // 假设从某处获取用户ID
+// val userId = getUserId() // 需要实现这个方法
+ val userId ="123456"
+ homeViewModel.initialize(requireContext(), userId)
+
//调用这个方法来设置 RecyclerView用于设置 RecyclerView 的布局和适配器。
setupRecyclerViews()
setupTabSwitching()
//调用这个方法来观察 ViewModel 中的数据变化
observeViewModelData()
+ setupCategorySelector()
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -96,7 +105,7 @@
adapter = financeAdapter
// 设置初始状态 - 添加这行
- binding.financeContent.visibility = View.GONE
+ binding.financeRecycler.visibility = View.GONE
// 设置点击监听
financeAdapter.setOnPackageClickListener { group, pack ->
@@ -108,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() {
@@ -122,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 {
- expressContent.visibility = View.VISIBLE
- financeContent.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
+ hideAllRecyclers()
+ expressRecycler.visibility = View.VISIBLE
+ updateTabStyles(tabExpress)
+ homeViewModel.loadExpressData()
}
// 财务标签点击事件
tabFinance.setOnClickListener {
- expressContent.visibility = View.GONE
- financeContent.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
-
- // 在切换到财务标签时加载数据 - 添加这行
+ hideAllRecyclers()
+ financeRecycler.visibility = View.VISIBLE
+ updateTabStyles(tabFinance)
homeViewModel.loadFinanceData()
}
- // 其他标签点击事件
- others.setOnClickListener {
- expressContent.visibility = View.GONE
- financeContent.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
}
}
}
@@ -176,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() {
@@ -210,4 +298,51 @@
super.onDestroyView()
_binding = null
}
+
+ private fun loadAdvertisements() {
+ // 使用 Glide 加载网络图片
+ Glide.with(this)
+ .load("http://192.168.1.235:9999/advertisement/up.png")
+ .into(binding.adBanner)
+
+ Glide.with(this)
+ .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