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

如何实现多个Activity向DisplayActivity传递并展示数据?

没问题,这其实很容易实现——本质上不管是Activity A还是B,都是通过Intent向DisplayActivity传递数据,核心逻辑是一致的,只需要让两个发起方遵循相同的传参规则,DisplayActivity统一接收并展示就行。我结合你的现有代码,一步步给你说明:


第一步:先修正DisplayActivity(Main2Activity)的接收逻辑

你现在的代码里有个小问题:在MainActivity里直接调用getIntent()是错误的——接收数据的逻辑应该放在DisplayActivity里,而不是发起方。正确的DisplayActivity代码应该是这样的:

public class Main2Activity extends AppCompatActivity {
    private TextView txt5, txt7;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_display_layout); // 替换成你的布局文件名

        txt5 = findViewById(R.id.txt5);
        txt7 = findViewById(R.id.txt7);

        // 获取从其他Activity传来的Intent
        Intent receivedIntent = getIntent();
        if (receivedIntent != null && receivedIntent.getExtras() != null) {
            Bundle bundle = receivedIntent.getExtras();
            // 取出传递的数据
            String firstName = bundle.getString("first_name");
            String lastName = bundle.getString("last_name");
            String dob = bundle.getString("date_of_birth");

            // 安全展示数据(避免空指针)
            if (firstName != null && lastName != null) {
                txt5.setText(": " + firstName + " " + lastName);
            }
            if (dob != null) {
                txt7.setText(": " + dob);
            }
        }
    }
}

同时,你需要把MainActivity里那段错误的接收代码删掉——也就是startActivityForResult(intent1,1);之后的所有内容,因为那部分逻辑不属于MainActivity。修正后的MainActivity点击事件代码:

btn1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        Intent intent1 = new Intent(MainActivity.this, Main2Activity.class);
        intent1.putExtra("first_name", edt1.getText().toString());
        intent1.putExtra("last_name", edt2.getText().toString());
        intent1.putExtra("date_of_birth", edt3.getText().toString());
        // 如果不需要从DisplayActivity返回结果,直接用startActivity即可
        startActivity(intent1);
        // 若需要返回结果,再保留 startActivityForResult(intent1, 1);
    }
});

第二步:实现Activity B向DisplayActivity传递数据

假设你的Activity B叫Main3Activity,布局里有对应的输入框和发送按钮,那么点击按钮的逻辑和Activity A几乎完全一致——只要保持传递数据的键名和A相同,DisplayActivity就能直接复用接收逻辑:

public class Main3Activity extends AppCompatActivity {
    private EditText edtFirst, edtLast, edtDob;
    private Button btnSend;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3); // 替换成你的Activity B布局文件名

        edtFirst = findViewById(R.id.edt_first);
        edtLast = findViewById(R.id.edt_last);
        edtDob = findViewById(R.id.edt_dob);
        btnSend = findViewById(R.id.btn_send);

        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main3Activity.this, Main2Activity.class);
                // 用和Activity A完全相同的键名传递数据
                intent.putExtra("first_name", edtFirst.getText().toString());
                intent.putExtra("last_name", edtLast.getText().toString());
                intent.putExtra("date_of_birth", edtDob.getText().toString());
                startActivity(intent);
            }
        });
    }
}

可选:区分数据来自Activity A还是B

如果你想在DisplayActivity里区分数据来源,可以额外传递一个标识参数:

在Activity A的Intent里添加:

intent1.putExtra("from_activity", "ActivityA");

在Activity B的Intent里添加:

intent.putExtra("from_activity", "ActivityB");

然后在DisplayActivity里接收并处理:

String fromActivity = bundle.getString("from_activity");
if ("ActivityA".equals(fromActivity)) {
    txt5.setText("来自A的用户: " + firstName + " " + lastName);
} else if ("ActivityB".equals(fromActivity)) {
    txt5.setText("来自B的用户: " + firstName + " " + lastName);
}

关键总结

  • 不管多少个Activity向DisplayActivity传数据,只要保持传递的键名一致,DisplayActivity的接收逻辑就不需要修改,直接复用即可。
  • 如果不同Activity传递的数据字段有差异,可以用bundle.containsKey("key")来判断字段是否存在,避免空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:26:29