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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24118527/article/details/88092719

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

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

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

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

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

返回A时可以看到结果

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

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


startActivityForResult

首先新建Project,命名为ActivityResultDemo

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/Text_one"
            android:layout_width="80dp"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="  +  " />

        <EditText
            android:id="@+id/Text_two"
            android:layout_width="80dp"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="  =  " />

        <EditText
            android:id="@+id/Text_result"
            android:layout_width="80dp"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="计算结果" />

</LinearLayout>

布局效果如下图所示

然后我们看MainActivity怎么写

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

REQUESTCODE

findViewById一下

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

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

获取输入框中的数据

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

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

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

REQUESTCODE

此处使用startActivityForResult方法

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


setResult

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

对应的效果如下图所示

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

find一下

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

然后获取intent中的key-value

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

接收到后在textview中显示

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

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

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

使用的key为key_c

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

resultCode


onActivityResult

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

先写好套路代码

接下来查看一下结果码

if (resultCode == 2)

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

if (requestCode == REQUESTCODE)

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

最后在TextView中显示一下即可

参考文章:

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

猜你喜欢

转载自blog.csdn.net/qq_24118527/article/details/88092719
今日推荐