使用Intent在活动中传递数据
通过前面的学习,我们了解到了使用Intent启动活动,拨打电话,发送短信。获取地理位置信息,在这一节我们将继续使用Intent在活动之间传递数据,Intent中提供了putExtra()方法的重载,该方法使用可以把要传递的数据暂时存储在Intent中,当启动另一个Activity时,只要再从中取出数据就可以,比如在FirstActivity中向SecongActivity中传递一个字符串时,可以使用以下:
在FirstActivity中写如下代码
String data="Hello SecondActivity";//声明需要在两个活动中传递数据
Intent intent=new Intent();//新建一个Intent对象
intent.setClass(FirstActivity.this ,SecondActivirty.class);//设置intent的执行动作:启动SecondActivity
intent.putExtra("extra_data",data);
startActivity(intent);
在putExtra()方法中传入两个参数,这两个参数是Key-Value的键值对;
在SecondActivity我们取出数据的代码如下
Intent intent=getIntent();
String data=intent.getStringExtra("extar_data");
log.d("SecondActivity".data);
在如上述的代码中,我们首先新建Intent对象,并通过getIntent()方法获取用于启动SecondActivity的Intent传递过来的数据data;因为我们 输入是data是一个字符串,所以我们调用getsStringExtra()方法来获取该数据的字符串,如果传入的是Int,我们则是使用getIntExtra()方法;如果是传入的布尔值,则使用getBooleanExtra()方法。
返回数据给上一个活动
既然能够将数据传递给下一个活动,那么我们是否可以将数据传递到上一个活动呢?答案是一定的。在Activity中还有一个方法startActivityForResult();此方法也是用来启动活动的;但不同的是在这一个方法中,是在活动销毁的时候能够返回一个结果给上一个活动。
startActivityForResult()方法传入其中的两个参数,第一个参数是:Intent。第二个参数是请求码(用于在后面的回调方法中判断该数据的来源。具体的实现:
我在FirstActivity中声明如下:
//声明Intent的执行动作
Intent intent=new Intent(FirstActivity.this , SecondActivirty.calss);
//启动活动方法中的请求码只要是唯一值就可以 了
startActivityForResult(intent,1);
接下来在SecondActivity中实现返回数据给上一活动的逻辑
Intent intent=new Intent();
intent.putExtra("data_reuturn","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
//setResult()方法中需要传入两个数据,第一个参数是用于向上一活动返回的处理结果,一般只是用RESULT_OK或者RESULT_CANCELED.。第二个参数则是把带有数据intent传递回去。最后调用finish()方法来销毁当前的活动。
因为我们是使用startActivityForResult()方法来启动SecondActivity的,所以在SecondActivity销毁之后就i会回调上一活动的onActivityResult()方法;因此我们在FirstActivity中需要重写此方法来接受返回的数据,如下
@override
protected void onActivityResult(int requestCode, int resultCode, intent data){{
switch(requestCode){
case 1;
if(resultCode==RESULT_OK){
String returnData=data.getStringExtra(data_return);
}
break;
default;
}
}
onActivityResult()方法需要传入三个参数。第一个参数是request也就是我们在启动活动时传入的1;第二个参数是resultCode,也就是返回数据的RESULT_OK.。第三个参数,data 就是返回数据的intent.