Android中startActivityForResult、setResult、onActivityResult数据传递详解

经常会遇到这样的应用场景:

ActivityA中调用ActivityB,并向ActivityB中传递参数

ActivityB中进行各种操作,操作结束后返回ActivityA,并将B的执行结果传递给A

如图所示,在A中输入算式

B中可以看到算式,然后在B中输入结果

返回A时可以看到结果

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第1张图片

完成以上操作需要用到3个重要的函数,即startActivityForResult、setResult和onActivityResult

本文对这三个函数进行讲解


startActivityForResult

首先新建Project,命名为ActivityResultDemo

先改布局文件,以下为activity_main.xml



    

        

        

        

        

        
    

    

布局效果如下图所示

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第2张图片

然后我们看MainActivity怎么写

先定义一下布局文件中使用的控件以及静态常量(结果码)

REQUESTCODE

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第3张图片

findViewById一下

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第4张图片

接下来新建一个Activity,命名为OtherActivity

回到MainActivity这里,添加代码如下

获取输入框中的数据

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第5张图片

再添加如下代码,主要是new一个意图,然后给进两对key-value

两对key-value的key分别为key_a和key_b

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第6张图片

接下来送出intent,并给出请求码

REQUESTCODE

此处使用startActivityForResult方法

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第7张图片

为了获取计算的结果,我们还需要在MainActivity这个类里增加一个函数,当然这个后面再说,我们先看另一个Activity


setResult

看一下OtherActivity,先看一下布局文件

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第8张图片

对应的效果如下图所示

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第9张图片

然后看OtherActivity的代码,先把布局里的控件添加进来

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第10张图片

find一下

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第11张图片

接下来新建一个intent引用,并使用getIntent方法获取

然后获取intent中的key-value

value如果没有的话默认设置为0

接收到后在textview中显示

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第12张图片

接下来为"计算结果"按钮添加事件

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第13张图片

我们用户计算好结果后,填入EditText里,在按钮事件中首先获取我们填入的计算结果

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第14张图片

然后new一个intent,并将计算结果以key-value的形式传回去

使用的key为key_c

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第15张图片

最后将intent返回回去,使用的是setResult方法,此处要给出结果码

resultCode

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第16张图片


onActivityResult

回到MainActivity中,讲解最后一个方法onActivityResult,这个函数需要Override在MainActivity类中

先写好套路代码

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第17张图片

接下来查看一下结果码

if (resultCode == 2)

若结果码正确,则查看一下请求码

if (requestCode == REQUESTCODE)

若请求码也正确,则可以使用返回来的intent,也就是这里的data(因为这个intent就是拿来传数据用的,所以定义的时候把它直接叫做data,其本质上是Intent的对象)

Android中startActivityForResult、setResult、onActivityResult数据传递详解_第18张图片

最后在TextView中显示一下即可

参考文章:

https://www.cnblogs.com/fuck1/p/5456337.html

你可能感兴趣的:(android)