app/src/main/AndroidManifest.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/firstapp/activity/PickupActivity.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/drawable/circle.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/drawable/circle_indicator.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/activity_pickup.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/item_express_package_home.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/item_package.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/src/main/AndroidManifest.xml
@@ -104,10 +104,9 @@ <activity android:name=".activity.PhoneLoginActivity" android:exported="false" /> <!-- <activity--> <!-- android:name=".ui.reminderOther.ReminderOtherAddActivity2"--> <!-- android:label="新增提醒" />--> <activity android:name=".activity.PickupActivity" android:exported="false"/> </application> app/src/main/java/com/example/firstapp/activity/PickupActivity.kt
对比新文件 @@ -0,0 +1,117 @@ package com.example.firstapp.activity import android.os.Bundle import android.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.example.firstapp.adapter.ExpressPackageAdapter import com.example.firstapp.core.Core import com.example.firstapp.databinding.ActivityPickupBinding import com.example.firstapp.model.ExpressPackage import kotlinx.coroutines.launch class PickupActivity : AppCompatActivity() { private lateinit var binding: ActivityPickupBinding private lateinit var expressAdapter: ExpressPackageAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityPickupBinding.inflate(layoutInflater) setContentView(binding.root) initViews() loadData() } private fun initViews() { // 初始化适配器,传入取件回调 expressAdapter = ExpressPackageAdapter { pack -> handleSinglePickup(pack) } binding.rvPackages.apply { layoutManager = LinearLayoutManager(this@PickupActivity) adapter = expressAdapter } binding.ivBack.setOnClickListener { finish() } // 修改底部按钮点击事件 binding.btnPickupAll.setOnClickListener { showPickupConfirmDialog() } } private fun showPickupConfirmDialog() { AlertDialog.Builder(this) .setTitle("确认取件") .setMessage("是否确认取出所有包裹?") .setPositiveButton("确认") { _, _ -> handlePickupAll() } .setNegativeButton("取消", null) .show() } private fun handleSinglePickup(pack: ExpressPackage) { lifecycleScope.launch { try { // 处理单个包裹取件 // Core.code.pickup(pack.trackingNumber) // 重新加载数据 loadData() // 通知MainActivity刷新 setResult(RESULT_OK) } catch (e: Exception) { // 处理错误 } } } private fun handlePickupAll() { lifecycleScope.launch { try { // 获取当前所有包裹 val packages = expressAdapter.currentList // 批量处理取件 packages.forEach { pack -> // Core.code.pickup(pack.trackingNumber) } // 清空列表 expressAdapter.submitList(emptyList()) // 更新包裹数量显示 binding.tvPackageCount.text = "共0个包裹" // 通知MainActivity刷新 setResult(RESULT_OK) } catch (e: Exception) { // 处理错误 // 如果出错则重新加载数据 loadData() } } } private fun loadData() { val stationName = intent.getStringExtra("station_name") ?: "" val company = intent.getStringExtra("company") ?: "" lifecycleScope.launch { val codes = Core.code.getByKeyword(stationName) val packages = codes.map { code -> ExpressPackage( company = code.name ?: company, trackingNumber = code.code, date = code.overtime ) } expressAdapter.submitList(packages) binding.tvStationName.text = stationName binding.tvPackageCount.text = "共${packages.size}个包裹" } } } app/src/main/java/com/example/firstapp/adapter/ExpressAdapter.kt
@@ -6,12 +6,20 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.ListAdapter import com.example.firstapp.databinding.ItemExpressGroupBinding import com.example.firstapp.databinding.ItemExpressPackageBinding import androidx.recyclerview.widget.DiffUtil import com.example.firstapp.model.ExpressGroup import com.example.firstapp.model.ExpressPackage import com.example.firstapp.R import com.example.firstapp.databinding.ItemPackageBinding import com.example.firstapp.databinding.ItemExpressPackageHomeBinding class ExpressAdapter : ListAdapter<ExpressGroup, ExpressAdapter.ViewHolder>(ExpressGroupDiffCallback()) { private var onPackageClickListener: (ExpressGroup, ExpressPackage) -> Unit = { _, _ -> } fun setOnPackageClickListener(listener: (ExpressGroup, ExpressPackage) -> Unit) { onPackageClickListener = listener } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ItemExpressGroupBinding.inflate( @@ -23,10 +31,17 @@ override fun onBindViewHolder(holder: ViewHolder, position: Int) { val group = getItem(position) holder.bind(group) holder.setOnPackageClickListener(onPackageClickListener) } class ViewHolder(private val binding: ItemExpressGroupBinding) : RecyclerView.ViewHolder(binding.root) { private val packagesAdapter = ExpressPackageAdapter() inner class ViewHolder(private val binding: ItemExpressGroupBinding) : RecyclerView.ViewHolder(binding.root) { private val packagesAdapter = ExpressPackageHomeAdapter { pack -> currentGroup?.let { group -> onPackageClickListener(group, pack) } } private var currentGroup: ExpressGroup? = null init { binding.rvPackages.apply { @@ -36,17 +51,25 @@ } fun bind(group: ExpressGroup) { currentGroup = group binding.tvStationName.text = group.stationName binding.tvPackageCount.text = "共${group.packages.size}个包裹" packagesAdapter.submitList(group.packages) } fun setOnPackageClickListener(listener: (ExpressGroup, ExpressPackage) -> Unit) { // 这个方法可以移除,因为我们在构造 ExpressPackageHomeAdapter 时已经处理了点击事件 // 或者保留这个方法但不做任何操作 } } } class ExpressPackageAdapter : ListAdapter<ExpressPackage, ExpressPackageAdapter.ViewHolder>(ExpressPackageDiffCallback()) { // 首页使用的包裹适配器 - 简化版本 class ExpressPackageHomeAdapter(private val onPackageClick: (ExpressPackage) -> Unit) : ListAdapter<ExpressPackage, ExpressPackageHomeAdapter.ViewHolder>(ExpressPackageDiffCallback()) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ItemExpressPackageBinding.inflate( val binding = ItemExpressPackageHomeBinding.inflate( LayoutInflater.from(parent.context), parent, false ) return ViewHolder(binding) @@ -57,11 +80,68 @@ holder.bind(pack) } class ViewHolder(private val binding: ItemExpressPackageBinding) : RecyclerView.ViewHolder(binding.root) { inner class ViewHolder(private val binding: ItemExpressPackageHomeBinding) : RecyclerView.ViewHolder(binding.root) { init { binding.root.setOnClickListener { val pack = getItem(adapterPosition) onPackageClick(pack) } } fun bind(pack: ExpressPackage) { binding.tvCompany.text = pack.company binding.tvTrackingNumber.text = pack.trackingNumber binding.tvDate.text = pack.date binding.tvPackageInfo.text = "${pack.company} - ${pack.trackingNumber}" } } } // 取件页面使用的包裹适配器 class ExpressPackageAdapter(private val onPackagePickup: (ExpressPackage) -> Unit = { _ -> }) : ListAdapter<ExpressPackage, ExpressPackageAdapter.ViewHolder>(ExpressPackageDiffCallback()) { private var onPackageClickListener: (ExpressPackage) -> Unit = {} private var stationName: String = "" fun setStationInfo(station: String) { stationName = station } fun setOnPackageClickListener(listener: (ExpressPackage) -> Unit) { onPackageClickListener = listener } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ItemPackageBinding.inflate( LayoutInflater.from(parent.context), parent, false ) return ViewHolder(binding) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val pack = getItem(position) holder.bind(pack) } inner class ViewHolder(private val binding: ItemPackageBinding) : RecyclerView.ViewHolder(binding.root) { init { binding.ivPackageStatus.setOnClickListener { val pack = getItem(adapterPosition) onPackagePickup(pack) } binding.root.setOnClickListener(null) } fun bind(pack: ExpressPackage) { binding.tvPackageInfo.text = "${pack.company} - ${pack.trackingNumber}" binding.ivPackageStatus.setImageResource( // if (pack.isPickedUp) R.drawable.circle_checked // else R.drawable.circle R.drawable.circle ) } } } app/src/main/java/com/example/firstapp/ui/home/HomeFragment.kt
@@ -1,5 +1,6 @@ package com.example.firstapp.ui.home import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -10,6 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.firstapp.R import com.example.firstapp.activity.PickupActivity import com.example.firstapp.adapter.ExpressAdapter import com.example.firstapp.core.Core import com.example.firstapp.databinding.FragmentHomeBinding @@ -50,14 +52,20 @@ } private fun setupRecyclerViews() { // 快递列表 //layoutManager = LinearLayoutManager(context):设置 RecyclerView 的布局管理器为线性布局管理器,表示列表是垂直排列的。 //创建一个 ExpressAdapter 的实例,用于提供 RecyclerView 的数据。 //将适配器设置给 RecyclerView,以便显示数据。 binding.expressRecycler.apply { layoutManager = LinearLayoutManager(context) expressAdapter = ExpressAdapter() adapter = expressAdapter // 设置点击监听 expressAdapter.setOnPackageClickListener { group, pack -> // 跳转到取件页面 val intent = Intent(requireContext(), PickupActivity::class.java).apply { putExtra("station_name", group.stationName) putExtra("company", pack.company) } startActivity(intent) } } // // 财务列表 app/src/main/res/drawable/circle.png
app/src/main/res/drawable/circle_indicator.xml
对比新文件 @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#4CAF50"/> <size android:width="40dp" android:height="40dp"/> </shape> app/src/main/res/layout/activity_pickup.xml
对比新文件 @@ -0,0 +1,80 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white"> <!-- 顶部栏 --> <LinearLayout android:id="@+id/layout_top" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical"> <ImageView android:id="@+id/iv_back" android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/location"/> <TextView android:id="@+id/tv_station_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:textSize="18sp" android:textColor="#333333"/> <TextView android:id="@+id/tv_package_count" android:layout_width="wrap_content" android:layout_height="24dp" android:layout_marginStart="8dp" android:textColor="#666666" android:textSize="14sp" /> </LinearLayout> </LinearLayout> <!-- 包裹列表 --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_packages" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/layout_top" android:layout_above="@id/layout_bottom" android:padding="16dp"/> <!-- 底部取件区域 --> <LinearLayout android:id="@+id/layout_bottom" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="16dp" android:gravity="center" android:orientation="vertical" android:padding="16dp"> <Button android:id="@+id/btn_pickup_all" android:layout_width="match_parent" android:layout_height="wrap_content" android:backgroundTint="@color/black" android:text="全部取件" android:textColor="@android:color/white" android:textSize="18sp" android:padding="12dp" android:layout_marginTop="8dp" android:drawablePadding="8dp" /> </LinearLayout> </RelativeLayout> app/src/main/res/layout/item_express_package_home.xml
对比新文件 @@ -0,0 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="12dp" android:gravity="center_vertical"> <TextView android:id="@+id/tv_package_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="#333333"/> </LinearLayout> app/src/main/res/layout/item_package.xml
对比新文件 @@ -0,0 +1,23 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="12dp" android:gravity="center_vertical"> <ImageView android:id="@+id/iv_package_status" android:layout_width="12dp" android:layout_height="12dp" android:src="@drawable/circle"/> <TextView android:id="@+id/tv_package_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:textSize="16sp" android:textColor="#333333"/> </LinearLayout>