You need to enable JavaScript to run this app. 安卓开发:披萨应用Intent跨Activity传值与getIntent()代码放置位置
优惠活动
大模型
产品
解决方案
定价
更多

安卓开发:披萨应用Intent跨Activity传值与getIntent()代码放置位置

跨Activity传值的代码位置说明

1. 发送数据的Intent代码放置位置

你当前代码里所有传值逻辑都不需要改动已有的RadioGroup、CheckBox的监听器,也不需要修改按钮的点击触发逻辑,直接替换你原来写的空openActivity2()方法即可——因为这个方法本身就是点跳转按钮时的执行入口,此时用户的所有单选、复选框选择都已经存在控件对象的状态里,统一在这个方法内读取、打包到Intent里是最合理的位置。

注意:不要把Intent传值代码写到RadioGroup的onCheckedChanged、CheckBox的onClick监听器里,否则会在用户每次点单选、勾选配料的时候就触发跳转,逻辑完全错误。
你原来写的所有单选按钮、复选框点击时弹Toast的逻辑完全不需要删除,保留即可——这些控件的选中状态是自身维护的,不管你有没有设置点击监听器,后续调用isChecked()、getCheckedRadioButtonId()都能准确读到用户的最终选择。

替换后的openActivity2()方法代码如下,直接放在原类里对应方法的位置即可:

public void openActivity2(){
    // 1. 收集单选按钮对应的披萨尺寸选择
    String pizzaSize = "未选择尺寸";
    int checkedSizeId = g1.getCheckedRadioButtonId();
    if (checkedSizeId == R.id.rb1) {
        pizzaSize = "Small";
    } else if (checkedSizeId == R.id.rb2) {
        pizzaSize = "Medium";
    } else if (checkedSizeId == R.id.rb3) {
        pizzaSize = "Large";
    }

    // 2. 收集复选框对应的配料选择
    StringBuilder toppings = new StringBuilder();
    if (cb1.isChecked()) toppings.append("Pepperoni ");
    if (cb2.isChecked()) toppings.append("Olive ");
    if (cb3.isChecked()) toppings.append("Mushroom ");
    if (cb4.isChecked()) toppings.append("Extra Cheese ");
    if (cb5.isChecked()) toppings.append("Chicken ");
    if (cb6.isChecked()) toppings.append("Green Pepper ");
    if (toppings.length() == 0) toppings.append("未选配料");

    // 3. 创建Intent,把收集到的数据以键值对形式打包
    Intent intent = new Intent(this, Activity2.class);
    intent.putExtra("PIZZA_SIZE", pizzaSize);
    intent.putExtra("SELECTED_TOPPINGS", toppings.toString().trim());

    // 4. 启动第二个Activity
    startActivity(intent);
}

2. 接收数据的getIntent()代码放置位置

getIntent()方法只需要写在Activity2的onCreate()方法内部,在你已经通过findViewById()拿到total这个TextView控件之后就可以调用,不需要放在按钮的点击事件里,也不需要等其他控件初始化完成。

实际修改示例如下,你可以在Activity2的onCreate方法里,紧跟原有控件初始化的位置加入接收逻辑,后续在点提交按钮拼接total的文本时,把收到的披萨选择内容和用户填写的联系信息拼在一起展示即可:

public class Activity2 extends AppCompatActivity {
    EditText editName, editPhone, editEmail, editAddress;
    TextView total;
    Button buttonSubmit;
    // 提前定义变量存接收来的传值
    String receivedSize, receivedToppings;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);
        // 以下保留你原有的所有控件初始化代码,无需修改
        editName = (EditText) findViewById(R.id.editName);
        editPhone = (EditText) findViewById(R.id.editPhone);
        editEmail = (EditText) findViewById(R.id.editEmail);
        editAddress = (EditText) findViewById(R.id.editAddress);
        total = (TextView) findViewById(R.id.total);
        buttonSubmit = (Button) findViewById(R.id.button2);

        // 紧跟在控件初始化完成后,直接调用getIntent接收传值,位置就在这里
        Intent receiveIntent = getIntent();
        receivedSize = receiveIntent.getStringExtra("PIZZA_SIZE");
        receivedToppings = receiveIntent.getStringExtra("SELECTED_TOPPINGS");

        buttonSubmit.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String name = editName.getText().toString();
                String phone = editPhone.getText().toString();
                String email = editEmail.getText().toString();
                String address = editAddress.getText().toString();
                // 将接收到的披萨选择和用户填写的信息一起拼接展示
                total.setText("尺寸:\t" + receivedSize
                        + "\n配料:\t" + receivedToppings
                        + "\nName:\t" + name
                        + "\nPhone:\t" + phone
                        + "\nEmail:\t" + email
                        + "\nAddress:\t" + address);
            }
        });
    }
}

内容的提问来源于stack exchange,提问作者Jtpok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 15:36:04