欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Studio基础——Activity之间数据的传递--Intent

程序员文章站 2022-03-03 19:51:43
...

一、概述

Intent是Android程序中各组件之间进行交互的一种一种方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
想要启动活动时传递数据其实很简单。Intent中提供了一系列putExtra(String name,String value)方法 的重载,可以把我们想要传递的数据暂存在Intent中,启动另一个活动后,只需要把这些数据再从Intent中取出来就可以了。

二、使用方法

例如将Activity1中的字符串传递到Activity2中,示例代码如下:

Intent intent = new Intent(this,Activity2.class);				//创建Intent对象
String data ="Hello Activity2";						//将值赋给字符串data
Intent.putExtra("extra_data",data );		//数据的存入,第一个参数是键用于后面从Intent中取值,第二个参数是传递的数据内容
StartActivity(intent);								//开启Activity2

接下来在Activity2中取出传递过来的数据,示例代码如下:

Intent intent = getIntent();					//通过getIntet()方法获取intent对象
String data = getStringExtra("extra_data");		//用getStringExtra方法,根据传入的键值取出相应的数据

由于我们传递的数据为字符串,所以使用getStringExtra()方法来获取数据。如果传递的整型数据,则使用getIntExtra()方法,布尔型数据则使用getBooleanExtra(),以此类推。


三.数据回传

在Activity中使用Intent既可以将数据传给下一个Activity,还可以将数据回传给上一个Activity。
startActivityForResult()方法就是用来进行数据的回传。
startActivityForResult(Intent intent,int requesetCode)方法接收两个参数,第一个是Intent对象,第二给参数是请求码,用来判断数据的来源,输入一个唯一值即可。使用该方法在Activity1中启动Activity2的示例代码如下:

Intent intent = new Intent(this,Activity2.class);
startActivityForResult(intent,1);

接下来在Activity2中添加返回数据的示例代码,具体如下:

Intent intent = new Intent();
intent.putExtra("extra_tata","hello world");
setResult(1,intent);
finish();

上述代码中,同样构建了一个intent对象,然后调用setResult(int resultCode,intent data)方法向上一个Activity回传数据,这个方法非常重要。第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值,第二给参数则把带有数据的Intent传递回去,然后用finish()方法来销毁当前活动。
由于使用startActivityForResult()方法启动Activity2,在Activity2被销毁后会回调上一个活动的onActivityResult()方法,因为我们需要在Activity1中重写这个方法来得到返回的数据。

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(resultCode){
		case 1:
			if(resultCode == 1 ){
			String returnData = data.getStringExtra("extra_tata")
			}
			break;
		default;
			}
}

onActivityResult()方法带有三个参数,第一个参数requestCode即我们在启动时传入的请求码。第二个参数resultCode即我们在返回数据时传入的处理结果。第三个参数data,即携带数据的intent。


由于在一个活动中可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都有回调到onActivityResult()这个方法中。因此我们首先要做的就是通过检查requestCode的值来判断数据来源。确定数数据是从Activity2返回的之后,我们再通过resultCode的值来判断结果是否成功。最后从data中取值并答应出来,这样及完成了数据回传的工作。

当然,用户可能不是通过按钮点击按钮,按时通过按下Back返回到Activity1,这样数据就没法返回了,我们可以通过在Activity2中重写onBackPressed()方法来解决这个问题。

@Override
public void onBackPressed(){
		Intent intent = new Intent();
		intent.putExtra("data_return","hello Anctivity1");
		setResult(RESULT_OK,intent);
		finish()
}
相关标签: 数据