一个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; } }