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

一、概述

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()
}
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值