Android Activity间传递数据
2016-03-24 14:56
316 查看
转载请注明:/article/9320398.html
一、使用Intent传递数据
1、传递简单数据
传递简单数据,如8种基本数据类型和String 都可以,通过Intent.putExtra()方法传递
FirstActivity中发送:
SecondActivity中获取:
2、传递复杂数据
传递较复杂的数据,可以通过Bundle对象。既可以传递简单数据,也可传递数组或者链表等。
3、传递自定义对象
传递自定义的对象时,要将类序列化(实现Serializable接口或Parcelable接口)。Serializable接口是Java提供的,使用比较简单,性能低;Parcelable接口是Android提供的,使用稍复杂,但性能高。
(1)自定义定义类实现Serializable接口
FirstActivity发送
SecondActivity获取对象
(2)定义类实现Parcelable接口,实现相应的方法
FirstActivity发送:
SecondActivity获取:
4、获取返回参数
FirstActivity中获取SecondActivity的返回值是StartActivityForResult()方法,同时实现onActivityResult(int requestCode, int resultCode, Intent data)方法。
FirstActivity中发送:
SecondActivity中设置,(也可以不设置)
当SecondActivity结束或者销毁时,会返回FirstActivity,调用OnActivityResult()方法:
一、使用Intent传递数据
1、传递简单数据
传递简单数据,如8种基本数据类型和String 都可以,通过Intent.putExtra()方法传递
FirstActivity中发送:
Intent intent=new Intent(FirstActivity.this,SecondActivity.class); intent.putExtra("name", "value"); intent.putExtra("id", 1); startActivity(intent);
SecondActivity中获取:
String name=getIntent().getStringExtra("name"); int id=getIntent().getIntExtra("id", 0);//后一个参数为默认值
2、传递复杂数据
传递较复杂的数据,可以通过Bundle对象。既可以传递简单数据,也可传递数组或者链表等。
Intent intent=new Intent(FirstActivity.this,SecondActivity.class); Bundle bundle=new Bundle(); bundle.putFloat("float", 0.4f); String[] s={"aaaa","bbb"}; bundle.putStringArray("string",s ); intent.putExtras(bundle); startActivity(intent);
3、传递自定义对象
传递自定义的对象时,要将类序列化(实现Serializable接口或Parcelable接口)。Serializable接口是Java提供的,使用比较简单,性能低;Parcelable接口是Android提供的,使用稍复杂,但性能高。
(1)自定义定义类实现Serializable接口
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; } }
FirstActivity发送
Intent intent=new Intent(FirstActivity.this,SecondActivity.class); User user=new User("name",0); intent.putExtra("user", user); startActivity(intent);
SecondActivity获取对象
User user=(User)getIntent().getSerializableExtra("user");
(2)定义类实现Parcelable接口,实现相应的方法
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; } /** * Parcel对象为参数的构造函数 * @param source */ public User(Parcel source){ this.name=source.readString(); this.age=source.readInt(); } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // 将对象映射成Parcel对象,把每个属性写入Parcel,按照写的顺序读出来 dest.writeString(name); dest.writeInt(age); } /** * 将Parcel容器的数据转化为对象数据 */ public static final Creator<User> CREATOR=new Creator<User>() { @Override public User[] newArray(int size) { // 返回对象数据的大小 return new User[size]; } @Override public User createFromParcel(Parcel source) { // 从Parcel中取出数据进行转换,按照写的顺序读出来 return new User(source); } };
FirstActivity发送:
Intent intent=new Intent(FirstActivity.this,SecondActivity.class); User user=new User("name",0); intent.putExtra("user", user); startActivity(intent);
SecondActivity获取:
User user=(User)getIntent().getParcelableExtra("user");
4、获取返回参数
FirstActivity中获取SecondActivity的返回值是StartActivityForResult()方法,同时实现onActivityResult(int requestCode, int resultCode, Intent data)方法。
FirstActivity中发送:
private static final int requestCode=0x11;//请求码 Intent intent=new Intent(FirstActivity.this,SecondActivity.class); startActivityForResult(intent, requestCode);
SecondActivity中设置,(也可以不设置)
int resultCode=0x22;//结果码,可设置不同的结果码,让FirstActivity根据结果码的不同来解决问题 Intent intent=new Intent(); intent.putExtra("data", "stringValue"); setResult(resultCode, intent);
当SecondActivity结束或者销毁时,会返回FirstActivity,调用OnActivityResult()方法:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch(requestCode){//即可以判断requestCode也可以判断resultCode,根据值得不同进行对应的操作。 case 0x11: //进行一些操作 String value=data.getStringExtra("data"); break; } }
相关文章推荐
- android .9.png ”点九” 图片制作方法
- Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )
- 如何查看Android设备上的分区信息
- Android 自定义ViewGroup 实战篇 -> 实现FlowLayout
- Android5.0以上使用MediaProjection截图和录屏
- 详解Android应用中ListView列表选项栏的编写方法
- Android 手把手教您自定义ViewGroup(一)
- Android Studio使用问题解决
- Android范例编程二:查单词
- Android MediaCodec使用介绍
- Android权限大全
- Android Intent和IntentFilter详解
- android studio error configuration with name default not found
- Android StackBox 分屏效果
- Android拍照后获得的图片旋转90度问题
- Media Playback媒体播放
- 自定义View中的事件
- Android View绘制13问13答
- .android:allowTaskReparenting 等Activity 的task属性
- [置顶] Android开发之 当前日期String类型转date类型 java代码中实现方法