Activity之间信息传递(参数传递)
2015-08-26 20:43
351 查看
1、传递简单参数:
以类似键值对方式传递值:
在OtherActivity里面用一下代码接受:
2、传递数据包Bundle
启动Activity页面代码:
接受Activity的代码如下:
以上key不可以相同,仅作事例!也可以使用i.putExtra(“data”,Bundle b);方式传递bundle
3、传递值对象
方法1:
i.putExtra(“key”,new Object);
First———–
注意:使用此方法必须要实现Serializable序列化接口,才可以使用
并且在接受对象时,使用方法为:
方法2:
i.putExtra(“key”,new Object);
Second———
注意:使用此方法必须实现Parcelable接口,并实现两个方法
重点第二个方法:
并写入一个方法
在OtherActivity页面获取值为:
使用ParcelableExtra获取
两者比较:
使用Parcelable接口操作比较多,但是性能较好,由开发人员自己控制,而实现Serializable接口,开发人员工作少,大部分由系统自己控制,但是性能较差。
附加:获取OtherActivity传回的参数
在第一个Activity接受参数,并且启动的函数不能为startActivity,应该用startActivityForResult(Intent i,int RequestCode);此处requestCode为请求码
并且需要重写方法onActivityResult(int requestCode,int resultCode,Intent data);
以类似键值对方式传递值:
Intent i = new Intent(MainActivity.this,OtherActivity.class); i.putExtra(String,args); startActivity(i);
在OtherActivity里面用一下代码接受:
Intent i = getIntent(); //其中s的类型要和args的类型一致 String s = i.getStringExtra(String);
2、传递数据包Bundle
启动Activity页面代码:
Intent i = new Intent(MainActivity.this,OtherActivity.class); Bundle b = new Bundle(); b.putString("key","String"); b.putInt("key",int); b.putBundle("key",Bundle b); i.putExtras(b); startActivity(i);
接受Activity的代码如下:
Intent i = getIntent(); Bundle b = i.getExtras(); String s = b.getString("key"); int i = b.getInt("key"); //若不存在,可以使用默认值,如不存在key,则s = "default" String s = b.getString("key","default");
以上key不可以相同,仅作事例!也可以使用i.putExtra(“data”,Bundle b);方式传递bundle
3、传递值对象
方法1:
i.putExtra(“key”,new Object);
First———–
注意:使用此方法必须要实现Serializable序列化接口,才可以使用
并且在接受对象时,使用方法为:
Intent i = getIntent(); Object b = (Object)i.getSerializableExtra("key");
方法2:
i.putExtra(“key”,new Object);
Second———
注意:使用此方法必须实现Parcelable接口,并实现两个方法
重点第二个方法:
public void writeToParcel(Parcel dest,int flags){ //可以写bundle,意味着当多个类型相同的参数时,也可以传递 dest.writeString(getName()); dest,writeInt(getAge()); }
并写入一个方法
public static final Creator<Object> CREATOR = new Creator<Object>(){ //复写两个方法 @Override public Object createFromParcel(Parcel source){ return new Object(source.readString(),source.readInt()); } @Override public Object[] newArray(int size){ return new Object[0]; } }
在OtherActivity页面获取值为:
使用ParcelableExtra获取
Intent i = getIntent(); Object b = (Object)i.getParcelableExtra("key");
两者比较:
使用Parcelable接口操作比较多,但是性能较好,由开发人员自己控制,而实现Serializable接口,开发人员工作少,大部分由系统自己控制,但是性能较差。
附加:获取OtherActivity传回的参数
//通过setResult()函数传回参数,有两个重载函数,stateCode为状态码,1为成功(可自己设定)Intent为数据载体 Intent data = new Intent(); data.putExtra("data",editText.getText().toString()); setResult(int stateCode,Intent data); //setResult(int stateCode); finish();//通过此函数结束当前activity,返回到之前的activity
在第一个Activity接受参数,并且启动的函数不能为startActivity,应该用startActivityForResult(Intent i,int RequestCode);此处requestCode为请求码
并且需要重写方法onActivityResult(int requestCode,int resultCode,Intent data);
startActivityForResult(i,0); @Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ //此处Intent 为第二个页面内传回来的Intent super.onActivityResult(requestCode,resultCode,data); String s = data.getStringExtra("data"); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories