如何实现多个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
相关产品推荐
相关产品推荐

