Android startActivityForResult和setResult的区别
发布时间 - 2026-01-11 03:00:59 点击率:次Android startActivityForResult和setResult的区别

startActivityForResult与startActivity的不同之处在于:
1、startActivity( )
仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。
2、startActivityForResult( )
可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。
相关函数:
startActivityForResult(Intent intent, Int requestCode) setResut(int resultCode, Intent intent) onActivityResult(int requestCode, int resultCode, Intent intent)
简单例子介绍:
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为一个依据,可以写其他的值,但一定要>=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:
break;
}
}
3.在B中回传数据时采用setResult方法,并且之后要调用finish方法。
setResult(RESULT_OK, intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle finish();//此处一定要调用finish()方法
Android activity的setResult()在什么时候调用(重点也是难点)
如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity,只有当前Activity被finish,结果才会被发送给parent的onActivityResult去处理!
如果一个activity要返回数据到启动它的那个activity,可以调用setResult()方法。那什么时候去调用setResult()方法返回数据呢?
看一下源码就明白了:
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
这段代码可以看出activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。
那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的
按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .
解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了
@Override
public void onBackPressed() {
Log.i(TAG, "onBackPressed");
setResult(Const.LIVE_OK);
super.onBackPressed();
}
当然还可以在onCreate()就调用setResult,不过我觉得这种方法没有重写onBackPressed()方法好.
以上就是Android startActivityForResult和setResult的区别,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# startActivityForResult和setResult的对比
# startActivityForResult和setResult的区别
# Android startActivityForResult的调用与封装详解
# Android startActivityForResult的基本用法详解
# Android利用startActivityForResult返回数据到前一个Activity
# Android startActivityForResult实例详解
# Android基础之startActivityForResult()的用法详解
# Android startActivityForResult()代替方案示例
# 回传
# 是在
# 跳转
# 什么时候
# 这段
# 重写
# 跳转到
# 的是
# 就会
# 也有
# 我在
# 还可以
# 我觉得
# 也就
# 如有
# 才会
# 其他的
# 希望能
# 仅仅是
# 可以看出
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Python正则表达式进阶教程_复杂匹配与分组替换解析
如何在腾讯云服务器上快速搭建个人网站?
Python数据仓库与ETL构建实战_Airflow调度流程详解
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel观察者模式如何使用_Laravel Model Observer配置
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
如何为不同团队 ID 动态生成多个独立按钮
如何有效防御Web建站篡改攻击?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel如何实现用户密码重置功能?(完整流程代码)
jQuery中的100个技巧汇总
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何在IIS中新建站点并配置端口与IP地址?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Android中AutoCompleteTextView自动提示
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
高防服务器:AI智能防御DDoS攻击与数据安全保障
移动端脚本框架Hammer.js
如何快速建站并高效导出源代码?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
魔方云NAT建站如何实现端口转发?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何实现模型的全局作用域?(Global Scope示例)
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel Session怎么存储_Laravel Session驱动配置详解
如何在云指建站中生成FTP站点?
,怎么在广州志愿者网站注册?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
js实现点击每个li节点,都弹出其文本值及修改
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
如何做网站制作流程,*游戏网站怎么搭建?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在IIS服务器上快速部署高效网站?
Python文件操作最佳实践_稳定性说明【指导】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】

