Activity活动切换及数据回传

来源:互联网 发布:淘宝客推广收费 编辑:程序博客网 时间:2024/05/12 06:41
安卓开发中,UI界面在进行切换过程中,也即是不同Activities的生命状态的转变。当应用程序由当前活动的Activity1切换到另外一个Activity2时,Activity1相关的所有数据会被操作系统,也就是Java虚拟机JVM自动压入堆栈,Activity2则处于活动状态。Activity切换除了使用Activity父类的方法setContentView动态加载视图外,更多的是使用“意图”类也就是Intent,使得程序切换到想要到达的Activity。采用Intent类进行Activity切换,可以通过方法startActivity(myIntent),也可以通过方法startActivityForResult(myIntent, requestCode)实现。前者实现切换时,数据只能从Activity1单向传送到Activity2;后者则可以实现数据的双向传送。


双向数据传送原理:
在Activity1中,通过startActivityForResult(myIntentData, requestCode)方法,将myIntent里面的数据以及请求码requestCode(自定义整型变量)发送给Activity2,Activity2收到数据及请求码后,通过setResult(resultCode, myIntentData)方法就可以实现向Activity1回传数据。


requestCode和resultCode都是整型常数,主要用来进行逻辑判断和功能标识。


requestCode用来区分是Activity1中的哪一个按钮事件,产生了Activity2,从而当Activity2传回数据给Activity1时,通过判断requestCode的值,就可以进行相应的按键事件处理。例如Activity1中有2个Button,2个Button都会产生新的Activity,但是回传数据只能回传给当前Activity1,那么Activity1如何判断是哪一个Button按钮事件响应得到了回传数据呢?requestCode就是用来处理这种情况。


要实现接收Activity2回传给Activity1的数据,在Activity1中,还需要重写Activity类的方法onActivityResult(requestCode, resultCode, IntentData)。该方法中的requestCode,就是用来判断Activity2的回传数据的。方法重写中可以通过switch(requestCode)的方法来进行。onActivityResult(requestCode, resultCode, IntentData)在Activity2 finish后会自动调用执行的,故其参数requestCode与startActivityForResult(myIntentData, requestCode)中的requestCode是对应的,例如某一按键启动startActivityForResult(myIntentData, requestCode)时传入requestCode = 13,那么在onActivityResult(requestCode, resultCode, IntentData)方法中进行switch判读时,case 13就对应处理该按键对应的回传数据。


与requestCode对应,resultCode用来区分是哪一个Activity2回传的数据。由于在Activity1中,可以通过startActivityForResult方法打开多个Activity2,故当多个Activity2 finish时,会将各自的数据回传给Activity1,为了区分是哪一个Activity2回传的数据,Activity2会回传自己的结果码,也就是resultCode。同样,在Activity1的方法onActivityResult(requestCode, resultCode, IntentData)中,通过switch(resultCode)就可以处理不同的回传数据。


具体举例:


在MainActivity中,通过startActivityForResult方法向OtherActivity中传递数据,并要求OtherActivity返回数据,即For Result



在OtherActivity中接收数据并做相应的处理后,再使用setResult方法回传数据给MainActivity



执行结果:

点击Jump,发送“非非年龄27”


收到后显示“非非年龄27”


点击“Finish”后,结束OtherActivity活动,数据自动传回MainActivity,在MainActivity中自动调用onActivity方法进行处理,如Toast显示“小象25”


0 0
原创粉丝点击