一个app是由多个activity组成的,activity之间相互传递数据,即activity之间的通信。提到安卓的通信,那么肯定离不开Intent,Intent中文翻译为 意图。通过Intent,我们可以开启另一个activity并向其发送数据。关于Intent,谷歌官方文档描述如下:
An Intent is a messaging object you can use to request an action from
another app component.
就是说Intent是一个消息对象,你可以用来请求另一个应用组件。
Intent的用法如下:
//第一个参数是Context ,上下文,即你现在所在的页面,第二个参数是你所要打开activity的类名
Intent intent = new Intent(CurrentActivity.this,OtherActivity.class);
//放入数据,可以是任何类型的数据
intent.putExtra("Key1","Value");
intent.putExtra("Key2",int);
//注意,如果放入的数据为类,那么这个类必须实现Serializable接口
intent.putExtra("Key3",new Bean());
//开启另一个界面
startActivity(intent);
在开启的第二个界面:
//拿到Intent对象
Intent intent = getIntent();
//拿到对应的数据
String value = intent.getStringExtra("key1");
int i = intent.getIntExtra("key2", defaultValue);
Bean bean = (Bean) intent.getSerializableExtra("key3");
以上介绍的是activity的单向通信,如果我们需要开启的activity返回数据,则必须使用startActivityForResult(Intent intent, int requestCode)方法。具体代码如下:
Intent intent = new Intent(CurrentActivity.this,OtherActivity.class);
//请求码,注意请求码一定要>=0
int requestCode = 1;
//开启第二个界面
startActivityForResult(intent,requestCode);
并且在第一个activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。这个方法会在第二个activity返回数据并执行finish()后调用。第二个activity代码如下:
//获取intent对象,并从中拿到我们所需要的数据
Intent intent = getIntent();
//将第一个activity所需要接收的数据放入
intent.putExtra("key","value");
//设置结果码与intent
setResult(RESULT_OK,intent);
//结束此activity,并返回第一个activity执行onActivityResult(int requestCode, int resultCode, Intent data)
finish();
第一个activity的onActivityResult(int requestCode, int resultCode, Intent data)重写如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode){
case RESULT_OK:
String value = data.getStringExtra("key");
break;
default:
break;
}
}