如何将CartActivity中getOrderItemData()的totals传入FoodListActivity的str_amount
嘿,这个跨Activity传值的需求其实很好解决,核心就是把CartActivity计算好的总金额和选中食品数据回传给启动它的FoodListActivity就行,我给你梳理了详细的步骤和代码示例,照着来就行:
解决方案步骤
1. 在FoodListActivity中启动CartActivity(带结果返回)
如果你的项目用AndroidX,推荐用新的Activity Result API(比旧的startActivityForResult更稳定):
// 定义接收CartActivity返回结果的Launcher private ActivityResultLauncher<Intent> cartActivityLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK && result.getData() != null) { // 获取返回的总金额 String totals = result.getData().getStringExtra("KEY_TOTALS"); // 获取选中的食品数据(可根据你实际的存储类型调整,这里用ArrayList<String>示例) ArrayList<String> selectedFoods = result.getData().getStringArrayListExtra("KEY_SELECTED_FOODS"); // 调用placeOrder方法,传入总金额 placeOrder(totals); // 展示选中的食品项(根据你的UI需求实现) if (selectedFoods != null) { updateSelectedFoodsUI(selectedFoods); } } } ); // 启动CartActivity的方法(比如点击购物车按钮时调用) private void openCartPage() { Intent intent = new Intent(FoodListActivity.this, CartActivity.class); // 如果需要把FoodListActivity已选的食品数据传给CartActivity,可在这里加putExtra // intent.putStringArrayListExtra("KEY_INIT_FOODS", yourPreSelectedFoods); cartActivityLauncher.launch(intent); }
要是你还在维护旧版本项目,用startActivityForResult的写法如下(不推荐,已被官方废弃):
private static final int REQUEST_CODE_CART = 1001; // 启动CartActivity private void openCartPage() { Intent intent = new Intent(FoodListActivity.this, CartActivity.class); startActivityForResult(intent, REQUEST_CODE_CART); } // 重写方法接收返回结果 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CART && resultCode == RESULT_OK && data != null) { String totals = data.getStringExtra("KEY_TOTALS"); ArrayList<String> selectedFoods = data.getStringArrayListExtra("KEY_SELECTED_FOODS"); placeOrder(totals); updateSelectedFoodsUI(selectedFoods); } }
2. 在CartActivity中处理下单点击,回传数据
先在getOrderItemData()方法里把计算好的totals和选中食品列表存为成员变量,然后在下单按钮点击时打包数据返回:
// 定义成员变量存储数据 private String mTotals; private ArrayList<String> mSelectedFoodItems; // 你的原有方法,计算总金额和选中食品 public void getOrderItemData() { // 这里是你原有的计算逻辑,得到totals字符串 mTotals = "¥89.00"; // 示例值,替换成你的实际计算结果 // 收集选中的食品项(根据你的购物车列表逻辑实现) mSelectedFoodItems = new ArrayList<>(); // 比如从RecyclerView的数据源中筛选选中项 // ... 你的原有代码 ... } // 下单按钮的点击事件 btnPlaceOrder.setOnClickListener(v -> { // 确保已经获取到数据 if (mTotals == null || mSelectedFoodItems == null) { getOrderItemData(); } // 打包返回数据 Intent resultIntent = new Intent(); resultIntent.putExtra("KEY_TOTALS", mTotals); resultIntent.putStringArrayListExtra("KEY_SELECTED_FOODS", mSelectedFoodItems); // 设置结果并关闭当前页面 setResult(RESULT_OK, resultIntent); finish(); });
3. 完善FoodListActivity的placeOrder方法
让方法接收字符串参数,处理总金额的展示:
public void placeOrder(String str_amount) { // 把总金额展示到UI上,比如TextView tvTotalAmount.setText(str_amount); // 这里可以添加其他下单逻辑,比如提交订单到服务器等 // ... } // 辅助方法:更新选中食品的UI展示 private void updateSelectedFoodsUI(ArrayList<String> foods) { // 比如更新RecyclerView的数据源并刷新 // foodListAdapter.setList(foods); // foodListAdapter.notifyDataSetChanged(); }
内容的提问来源于stack exchange,提问作者Jacky
相关产品推荐
相关产品推荐

