Android Studio中多Activity传值与跳转实现方法咨询
没问题,这是个很基础的Android组件交互需求,我给你一步步拆解实现方法:
实现步骤
1. 先在AndroidManifest.xml中注册所有Activity
Android系统要求所有要启动的Activity必须在清单文件中注册,不然会抛出ActivityNotFoundException。示例代码如下:
<application ...> <activity android:name=".Activity1" /> <activity android:name=".Activity2" /> <activity android:name=".Activity3" /> </application>
2. 给Activity1添加布局和逻辑
首先在Activity1的布局文件(比如activity_1.xml)中添加两个按钮,分别对应“跳转并传数据到Activity2”和“启动Activity3”:
<LinearLayout ... android:orientation="vertical"> <Button android:id="@+id/btn_send_to_activity2" android:text="跳转并传数据到Activity2" /> <Button android:id="@+id/btn_start_activity3" android:text="启动Activity3" /> </LinearLayout>
接下来分两种主流语言实现逻辑:
用Java实现Activity1的逻辑
public class Activity1 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_1); // 处理跳转并传数据到Activity2的按钮 Button btnSendToActivity2 = findViewById(R.id.btn_send_to_activity2); btnSendToActivity2.setOnClickListener(v -> { // 创建Intent,指定跳转目标 Intent intent = new Intent(Activity1.this, Activity2.class); // 以键值对形式传递数据,支持基本数据类型、字符串等 intent.putExtra("USER_NAME", "Prahasan"); intent.putExtra("USER_AGE", 25); // 启动Activity2 startActivity(intent); }); // 处理启动Activity3的按钮 Button btnStartActivity3 = findViewById(R.id.btn_start_activity3); btnStartActivity3.setOnClickListener(v -> { Intent intent = new Intent(Activity1.this, Activity3.class); startActivity(intent); }); } }
用Kotlin实现Activity1的逻辑
class Activity1 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_1) btn_send_to_activity2.setOnClickListener { val intent = Intent(this, Activity2::class.java) // 传递数据 intent.putExtra("USER_NAME", "Prahasan") intent.putExtra("USER_AGE", 25) startActivity(intent) } btn_start_activity3.setOnClickListener { val intent = Intent(this, Activity3::class.java) startActivity(intent) } } }
3. 在Activity2中接收传递的数据
Activity2需要在onCreate方法中获取Intent携带的额外数据,示例如下:
Java版本的Activity2
public class Activity2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); // 获取Intent对象 Intent intent = getIntent(); // 根据键名获取数据,注意处理null或未传值的情况 String userName = intent.getStringExtra("USER_NAME"); int userAge = intent.getIntExtra("USER_AGE", 0); // 第二个参数是默认值,未取到数据时用它 // 可以把数据显示到TextView或者做其他业务处理 TextView tvInfo = findViewById(R.id.tv_info); tvInfo.setText("姓名:" + userName + "\n年龄:" + userAge); } }
Kotlin版本的Activity2
class Activity2 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_2) val userName = intent.getStringExtra("USER_NAME") val userAge = intent.getIntExtra("USER_AGE", 0) tv_info.text = "姓名:$userName\n年龄:$userAge" } }
额外提示
- 如果需要传递自定义对象,需要让对象实现
Serializable或者Parcelable接口(推荐用Parcelable,性能更优)。 - 如果后续需要从Activity2返回数据给Activity1,可以用
registerForActivityResult(新API)替代旧的startActivityForResult,不过你的需求里没提到这个,就不多展开了。
内容的提问来源于stack exchange,提问作者Prahasan P
相关产品推荐
相关产品推荐

