You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.9 KiB
4.9 KiB
🗑️ 商品删除功能实现总结
📋 实现概述
为广理客栈添加了商品删除功能,允许商品发布者删除自己发布的商品。
🔧 修改的文件
1. app/src/main/res/layout/activity_product_detail.xml
修改内容:
- 添加删除按钮(btnDelete)到操作按钮区域
- 设置按钮样式为红色背景,显示垃圾桶图标
- 初始状态为隐藏(visibility="gone")
新增元素:
<Button
android:id="@+id/btn_delete"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="🗑️ 删除商品"
android:textColor="#FFFFFF"
android:textSize="16sp"
android:background="@android:color/holo_red_dark"
android:layout_marginEnd="8dp"
android:visibility="gone" />
2. app/src/main/java/com/example/myapplication/ProductDetailActivity.java
新增功能:
-
导入AlertDialog:
import android.app.AlertDialog; -
添加删除按钮引用:
private Button btnDelete; -
初始化删除按钮:
btnDelete = findViewById(R.id.btn_delete); -
权限检查功能:
private void checkIfUserOwnsProduct() { String currentUser = sessionManager.getUsername(); if (currentUser != null && currentUser.equals(product.getSellerUsername())) { btnDelete.setVisibility(View.VISIBLE); btnChat.setVisibility(View.GONE); } else { btnDelete.setVisibility(View.GONE); btnChat.setVisibility(View.VISIBLE); } } -
删除确认对话框:
private void showDeleteConfirmationDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("确认删除"); builder.setMessage("确定要删除这个商品吗?删除后无法恢复。"); builder.setPositiveButton("删除", (dialog, which) -> deleteProduct()); builder.setNegativeButton("取消", (dialog, which) -> dialog.dismiss()); builder.create().show(); } -
删除商品功能:
private void deleteProduct() { loadingManager.showLoading("正在删除商品..."); new Thread(() -> { boolean success = productRepository.deleteProduct(product.getId()); runOnUiThread(() -> { loadingManager.hideLoading(); if (success) { showToast("商品删除成功!"); setResult(RESULT_OK); finish(); } else { showToast("商品删除失败,请重试"); } }); }).start(); } -
绑定删除按钮事件:
btnDelete.setOnClickListener(v -> { if (product != null) { showDeleteConfirmationDialog(); } });
3. app/src/main/java/com/example/myapplication/ProductListActivity.java
修改内容:
-
添加商品详情请求码:
private static final int REQUEST_PRODUCT_DETAIL = 1002; -
修改商品点击事件:
// 从: startActivity(intent); // 改为: startActivityForResult(intent, REQUEST_PRODUCT_DETAIL); -
添加删除后的刷新处理:
} else if (requestCode == REQUEST_PRODUCT_DETAIL && resultCode == RESULT_OK) { // 从商品详情页返回,可能删除了商品,刷新列表 loadProducts(); }
🏗️ 架构设计
权限控制
- 前端检查:通过SessionManager获取当前用户,与商品发布者对比
- 界面控制:只有自己的商品才显示删除按钮
- 按钮切换:自己的商品隐藏"联系卖家",显示"删除商品"
安全机制
- 二次确认:删除前弹出确认对话框
- 加载提示:删除过程中显示加载动画
- 结果反馈:删除成功/失败都有相应的提示
数据流
用户界面 → 权限检查 → 确认对话框 → 删除请求 → ProductRepository → 数据库删除 → 结果返回 → 界面更新
✅ 功能特性
- 智能权限识别:自动识别商品所有者
- 安全删除确认:防止误操作
- 实时界面更新:删除后自动刷新列表
- 用户友好提示:清晰的操作反馈
- 线程安全:数据库操作在后台线程执行
🧪 测试要点
- 权限测试:验证只有商品发布者能看到删除按钮
- 删除功能:确认删除操作能正确执行
- 界面更新:验证删除后列表能正确刷新
- 错误处理:测试删除失败时的错误提示
- 用户体验:确认操作流程顺畅
📊 实现效果
✅ 编译通过,无错误 ✅ 功能完整,符合需求 ✅ 代码规范,易于维护 ✅ 用户体验良好 ✅ 安全性考虑周全
实现时间: 2026年4月10日 实现状态: ✅ 完成 测试状态: ✅ 编译通过