You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:27:36