Android(安卓)Activity间传递数据
16lz
2021-01-25
转载请注明:http://blog.csdn.net/ly20116/article/details/50970840
一、使用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; } }
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android图片内存优化的几点心得
- ConnectivityService分析
- android学生管理系统,利用linerLayout,实现xml的读取和写入,以及按
- Android(安卓)ListView 获取网络上的数据,动态地进行数据更新!
- Android(安卓)HIDL基础篇(一)
- Android一些好用的类或方法