StartActivityForResult用法

发布时间:2024-01-11 00:20:34 来源:君肯网

当我们在第一个Activity打开到第二个Activity,第二个Activity返回数据给第一个Activity时,我们需要在第一个Activity重写 public void onActivityResult(int requestCode, int resultCode, Intent data) 方法。

使用步骤详解

1、首先在第一个Activity调用startActivityForResult方法:

2、在第二个Activity中用setResult方法设置返回值:

3、在第一个Activity中重写onActivityResult方法,数据可以从data中获取:

备注:

requestCode作用

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这样做:

resultCode作用

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(SecondActivity和ThirdActivity为要打开的新Activity):

android之startActivityForResult介绍

1、区别

StartActivityForResult:是说明调用这个activity,关闭后可以接收到返回值

OnActivityForResult:当activity关闭后,如果有返回值,则会在这个方法内接收

2、联系

这两者是配对使用的,一个是告诉对方有接收值,一个是接收对方的返回值

比如

1.跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)

Intent intent=new Intent()

intent.setClass(A.this, B.class)

Bundle bundle=new Bundle()

String str1="aaaaaa"

bundle.putString("str1", str1)

intent.putExtras(bundle)

startActivityForResult(intent, 0)//这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要&gt=0

2.重写onActivityResult方法,用来接收B回传的数据。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK

   case RESULT_OK:

    Bundle b=data.getExtras() //data为B中回传的Intent

    String str=b.getString("str1")//str即为回传的值

    break

default:

StartActivityForResult用法

    break

    }

}

3.在B中回传数据时采用setResult方法,并且之后要调用finish方法。

setResult(RESULT_OK, intent) //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle

finish()//此处一定要调用finish()方法

在application里怎么使用startactivityforresult

startActivityForResult与startActivity类似都是用来跳转界面。

但是,startActivityForResult和startActivity也有不同的地方:

也就是执行startActivityForResult后可以从打开的界面,再返回到主界面去。

相关的接口:

MainActivity.java:

test2.java:

activity_main.xml:

activity_test2.xml:

执行效果:

调用startActivityForResult后onActivityResult被立即触发

如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。

package com.ljq.activitys

import android.app.Activityimport android.content.Intentimport android.os.Bundleimport android.util.Logimport android.view.Viewimport android.widget.Button

public class MainActivity extends Activity { private final static String TAG="MainActivity"@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)setContentView(R.layout.main)

Button btnOpen=(Button)this.findViewById(R.id.btnOpen)btnOpen.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) {

//得到新打开Activity关闭后返回的数据

//第二个参数为请求码,可以根据业务需求自己编号

startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1)

从 ActivityA 中吊起另外一个 ActivityB ,在ActivityB中做进一步处理,finish之后要拿到相应结果,在ActivityA中做进一步处理。

ActivityA中调用 startActivityForResult(Intent intent, int requestCode) 方法,定义 requestCode ,在 onActivityResult(int requestCode, int resultCode, Intent data) 根据requestCode来识别对应的回调做处理。

但是面对这个很简单的需求出了一个问题就是:在ActivityA中调用 startActivityForResult(Intent intent, int requestCode) 之后 onActivityResult(int requestCode, int resultCode, Intent data) 方法被立即触发了(是的在ActivityB启动之前),这就和可怕了,我根本就拿不到这个回调啊!

经排查,如果被启动的Activity的 launch mode 为 SingleInstacne 或 SignleTask ,且不论是从Activity还是从Fragment启动该Activity都会造成这种情况,所以根据实际情况修改launch mode即可。

以上就是关于StartActivityForResult用法全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

当我们在第一个Activity打开到第二个Activity,第二个Activity返回数据给第一个Activity时,我们需要在第一个Act…
查看详情
当我们在第一个Activity打开到第二个Activity,第二个Activity返回数据给第一个Activity时,我们需要在第一个Act…
查看详情
当我们在第一个Activity打开到第二个Activity,第二个Activity返回数据给第一个Activity时,我们需要在第一个Act…
查看详情
相关文章
推荐游戏
风之谷
风之谷
游戏资讯 10.5M
下载
斗罗大陆3
斗罗大陆3
游戏资讯 566.9M
下载
冠军网球
冠军网球
游戏资讯 148.1M
下载
最佳炮手
最佳炮手
游戏资讯 68.1M
下载
如梦下弦月
如梦下弦月
游戏资讯 840.1M
下载
富甲封神传
富甲封神传
游戏资讯 263.0M
下载