您的位置:首页 > 移动开发 > Android开发

Activity之间信息传递(参数传递)

2015-08-26 20:43 351 查看
1、传递简单参数:

以类似键值对方式传递值:

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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息