经常会遇到这样的应用场景:
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中显示一下即可
参考文章: