前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候可能会遇到需要传值的需要。Activity之间传值是通过Bundle来实现的。
一、通过Bundle传值介绍
二、通过Bundle传值例子Intent提供了多个重载方法来携带数据
putExtras(Bundle data):向Intent中放入需要的数据包
Bundle getExtras():取出Intent所携带的数据
putExtras(String name, Xxx value):向Intent中按照key-value形式传值
getXxxExtra(String name):从Intent中按key取值
从上面方法中可以看到Bundle就像一个数据包一样,Bundle中存取数据的方法如下:
pubXxx(String key, Xxx data):向Bundle中放入数据
pubSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象。
getXxx(Strign key):从Bundle中取出数据
getSerializable(String key, Serializable data):从Bundle中取出一个可序列化的对象。
Bundle对象是由系统需要时自动创建的,我们不需要管。
三、通过Bundle返回结果MainActivity.java中的核心代码
Person.java类
1234567891011Intent intent =
new
Intent();
intent.setAction(
"com.example.intent.action.TEST_ACTION"
);
intent.putExtra(
"test1"
,
1
);
Bundle bundle =
new
Bundle();
bundle.putBoolean(
"test2"
,
false
);
bundle.putSerializable(
"test3"
,
new
Person(
"大碗干拌"
,
2
));
intent.putExtras(bundle);
startActivity(intent);
SecondActivity.java
1234567891011121314151617181920212223242526272829303132package
com.example.testintent;
import
java.io.Serializable;
public
class
Person
implements
Serializable{
private
String name;
private
int
age;
public
Person(String name,
int
age) {
super
();
this
.name = name;
this
.age = 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;
}
@Override
public
String toString() {
// TODO Auto-generated method stub
return
"姓名:"
+ name +
", "
+
"年龄:"
+ age;
}
}
运行结果
12345678910111213public
class
SecondActivity
extends
Activity{
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
System.out.println(bundle.getInt(
"test1"
));
System.out.println(bundle.getBoolean(
"test2"
));
System.out.println(intent.getSerializableExtra(
"test3"
));
}
}
前面已经提到过了,Activity还提供了一个startActivityForResult(Intent intent, int requestCode)方法来启动其他Activity。这样就需要如下两个条件:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+MaGitbHHsEFjdGl2aXR50OjSqtbY0LRvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBpbnRlbnQpt723qMC0u/HIobe1u9i1xMr9vt2hozwvcD4KPHA+MqGisbvG9LavtcRBY3RpdnR50OjSqrX308NzZXRSZXN1bHS3vbeoyejWw7SmwO294bn7oaM8L3A+CjwvYmxvY2txdW90ZT4Ky8Shos2ouf1CdW5kbGW3tbvYtKbA7b3hufvA/dfTPGJyPgo8YmxvY2txdW90ZT4KPHA+vavJz8PmtcS0+sLr1tBzdGFydEFjdGl2aXR5uMSzyXN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQ8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">Bundle bundle = new Bundle(); bundle.putBoolean("test2", false); bundle.putSerializable("test3", new Person("大碗干拌", 2)); intent.putExtras(bundle); startActivityForResult(intent, 0);SecondActivity.java
在MainActivity中重写onActivityResult方法
1234567891011121314151617181920212223package
com.example.testintent;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
public
class
SecondActivity
extends
Activity{
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
System.out.println(bundle.getInt(
"test1"
));
System.out.println(bundle.getBoolean(
"test2"
));
System.out.println(intent.getSerializableExtra(
"test3"
));
intent.putExtra(
"test4"
,
"返回值"
);
setResult(
0
, intent);
finish();
}
}
执行结果
12345678@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent intent) {
if
(requestCode ==
0
&& resultCode ==
0
){
Bundle data = intent.getExtras();
System.out.println(data.getString(
"test4"
));
}
}