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()
}
上一篇: java笔记本-线程池和线程知识
推荐阅读
-
关于Android Activity之间传递数据的6种方式
-
Android Activity之间的数据传递方法总结
-
Android Activity之间传递图片(Bitmap)的方法
-
Android 两个Fragment之间的跳转和数据的传递实例详解
-
黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式
-
Android 入门第十讲02-广播(广播概述,使用方法(系统广播,自定义广播,两个activity之间的交互和传值),EventBus使用方法,数据传递,线程切换,Android的系统广播大全)
-
Android实现Activities之间进行数据传递的方法
-
android activity之间数据传递更新UI(二)
-
android基础学习-android篇day17-Activity之间数据传递方式
-
android app之间数据传递 (一)intent