1.传递简单数据
2.传递数据 包Bundle
3.传递值对象
4.获取Activity的返回参数
1.传递简单数据
在Activity跳转时如何传递简单数据。
在启动活动时传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了。
在activity_main.xml中添加一个Button,并把布局方式改为LinearLayout
新建hello.xml
在里面放入一个不显示任何内容的TextView
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:id="@+id/textView_1" />
MainActivity.java
putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数才是真正要传递的数据。
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_1; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_1=(Button)this.findViewById(R.id.button_1); //注册监听器,匿名内部类 button_1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,hello.class); intent.putExtra("data","Hello jikexueyuan");//传递字符串 startActivity(intent); } }); } }
在这里要新建hello.java
通过getIntent()方法将获取到用于启动hello的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。在这里由于我们传递的是字符串,所以使用getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。
public class hello extends AppCompatActivity { private TextView textView_1; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.hello); textView_1=(TextView)findViewById(R.id.textView_1); Intent intent=getIntent(); textView_1.setText(intent.getStringExtra("data")); } }
AndroidManifest.xml
<activity android:name="hello" android:label="@string/app_name"> </activity>
运行效果:
当点击按钮1时:
2.传递数据 包Bundle
在Activity跳转时如何传递复杂的数据。
MainActivity.java
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_2; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_2=(Button)this.findViewById(R.id.button_2); //注册监听器,匿名内部类 button_2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,new_main.class); Bundle bundle=new Bundle(); bundle.putString("name","jikexueyuan");//传递字符串 bundle.putInt("age",2);//传递整数类型参数 bundle.putString("name1","iwen"); intent.putExtras(bundle); startActivity(intent); } }); } }
new_main.java
public class new_main extends AppCompatActivity { private TextView textView_2; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.new_main); textView_2=(TextView)findViewById(R.id.textView_2); Intent intent=getIntent(); Bundle data=intent.getExtras(); textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"), data.getInt("age"),data.getString("name1","leo")));//如若没有传入name1,则显示默认值leo } }
另一种方法:
MainActivity.java
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_2; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_2=(Button)this.findViewById(R.id.button_2); //注册监听器,匿名内部类 button_2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,new_main.class); Bundle bundle=new Bundle(); bundle.putString("name","jikexueyuan"); bundle.putInt("age",2); bundle.putString("name1","iwen"); //intent.putExtras(bundle); intent.putExtra("data",bundle); startActivity(intent); } }); } }
new_main.java
public class new_main extends AppCompatActivity { private TextView textView_2; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.new_main); textView_2=(TextView)findViewById(R.id.textView_2); Intent intent=getIntent(); //Bundle data=intent.getExtras(); Bundle data=intent.getBundleExtra("data"); textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),data.getInt("age"),data.getString("name1","leo"))); } }
3.传递值对象
在Activity跳转时如何传递自定义的值对象。
在activity_main中新添加一个button_3
新建User.class
public class User implements Serializable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(String name,int age){ this.name=name; this.age=age; } }
MainActivity.java
public class MainActivity extends AppCompatActivity { //声明变量 private Button button_3; @Override protected void onCreate(Bundle savedInstanceState) { //保存Activity的状态 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得对象引用 button_3=(Button) this.findViewById(R.id.button_3); //注册监听器,匿名内部类 button_3.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,ding.class); intent.putExtra("user",new User("jikexueyuan",2)); startActivity(intent); } }); } }
ding.java
public class ding extends AppCompatActivity{ private TextView textView_3; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.ding); textView_3=(TextView)findViewById(R.id.textView_3); Intent intent=getIntent(); User user=(User)intent.getSerializableExtra("user"); textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge())); } }
另一种android平台提供的实现方法
User.java
public class User implements Parcelable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(String name,int age){ this.name=name; this.age=age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getName()); dest.writeInt(getAge()); } public static final Creator<User> CREATOR=new Creator<User>() { @Override public User createFromParcel(Parcel source) { return new User(source.readString(),source.readInt()); } @Override public User[] newArray(int size) { return new User[size]; } }; }
ding.java
public class ding extends AppCompatActivity{ private TextView textView_3; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.ding); textView_3=(TextView)findViewById(R.id.textView_3); Intent intent=getIntent(); //User user=(User)intent.getSerializableExtra("user"); User user=intent.getParcelableExtra("user"); textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge())); } }
相关推荐
本篇文章将详细讲解如何在Android的两个Activity之间传递参数,并通过给出的`LoginActivity.java`和`MainActivity.java`两个文件为例进行说明。 首先,我们要了解在Android中,有两种主要的方式来传递数据: 1. ...
本实例将深入讲解如何在Eclipse V4.2.0环境下,使用Intent对象来实现在Android Activity之间简单地传递参数。 首先,我们需要了解Intent的作用。Intent在Android系统中扮演着消息传递的角色,它能够启动新的...
总结一下,Activity之间的相互调用与传递参数是Android开发中的核心技能。理解启动模式、Intent的使用、回调机制以及生命周期管理,可以帮助我们构建健壮且用户体验良好的应用程序。在实际编码时,应根据具体需求...
Android 中Activity 之间传递参数 Android 中Activity 之间传递参数是 Android 应用程序开发中的一种常见需求。通过本文,我们将主要介绍 Android 中Activity 之间传递参数的相关资料,希望通过本文能帮助到大家,...
本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的Activity,拨打电话,以及在两个Activity之间传递参数。 首先,让我们讨论如何使用Intent打开另一个Activity。在Android中,Activity是用户界面的...
要传递参数,我们可以利用Intent的putExtra()和getExtra()方法。比如,我们想传递一个字符串: ```java // 在源Activity中设置参数 intent.putExtra("key", "value"); // 在目标Activity中获取参数 String value =...
本篇文章将深入探讨如何在Android的Activity之间传递参数,帮助开发者更好地理解和运用这一关键机制。 一、Intent:数据传递的载体 在Android中,Intent不仅用于启动一个Activity,还可以承载数据进行传输。我们...
七、Activity之间的通信 除了通过Intent传递参数外,Activity间还可以通过startActivityForResult()进行回调通信,或者使用BroadcastReceiver、EventBus、LiveData等组件进行更复杂的异步通信。 总结,Android的...
在Android开发过程中,经常要在Activity之间传递参数,使用Android系统提供的方法可以传递基本数据类型的变量,但有时候我们经常要传递一些复杂的数据类型或自定义的类,这种情况的参数无法直接传递,我们可以通过...
在实际项目中,我们需要灵活地跳转和传递数据,以便各个Activity之间能有效地协同工作。本教程将详细讲解如何在Android中添加多个Activity以及如何实现参数传递。 首先,我们创建新的Activity。在Android Studio中...
1. **创建接口**:首先,定义一个接口,通常放在Fragment类中,包含需要在Fragment和Activity之间传递的方法。 2. **实现接口**:然后,在Activity中实现这个接口。这样,当Fragment需要与Activity通信时,它可以...
在不同Activity之间传递Bitmap,通常是为了进行图片显示、编辑或者处理。本篇文章将深入探讨如何在Activity跳转时传递Bitmap对象,并以一个Demo为例进行讲解。 首先,理解Bitmap的基本概念。Bitmap对象存储了图像的...
本主题将深入探讨“Activity之间的值传递”,特别是利用`ActivityResult`接口进行高效的数据通信。 Activity之间的值传递通常有两种主要方式:Intent和ActivityResult API。Intent主要用于启动另一个Activity并传递...
在本篇内容中,我们将深入探讨Activity之间的通信以及它们在不同操作下的生命周期变化,并讨论如何传递回传参数。 首先,我们来看Activity之间的通信。在Android系统中,Activity可以通过Intent进行通信。Intent是...
2. **通过Bundle在Activity之间传递参数**:Bundle是一个可以存放一系列键值对的数据容器,常用于在Intent中传递数据。 3. **切换Activity的方法**:了解如何使用Intent启动新的Activity以及如何正确地关闭当前...
在实际开发中,经常需要在Fragment和Activity之间传递数据,这通常是通过Bundle对象来实现的。Bundle类在Android中扮演着数据容器的角色,它允许我们存储键值对的数据,并在不同组件之间共享。 首先,了解Activity...
目的在于在Activity之间传递参数时考虑序列化问题,适用于进程内通信提供了一个轻量级的OnActivityResult机制(OnResultCallback,使用方式基本和OnActivity不一样)状态栏一体化的简单封装Activity和Fragment状态...