android 适配器里onactivityforresult,Android -startActivityForResult分析

本文详细介绍了Android中的startActivityForResult使用场景,例如在拍照或选择联系人时获取数据。requestCode用于标识请求来源,通常大于0,resultCode用于传递结果状态,如RESULT_CANCELED或RESULT_OK。setResult应放在finish()之前执行,不能在finish之后,因为finish()内部会处理resultCode和resultData。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1eaa9d12e99b

本文主要内容

startActivityForResult 使用场景是什么? requestCode、 resultCode 含义是什么?

A 启动 B ,B 中何时执行 setResult ? setResult 是否可以位于 finish 之后?

1.startActivityForResult 使用场景是什么? requestCode、 resultCode 含义是什么?

startActivityForResult使用场景:

需要从新开启的Actiivty中获取到数据;比如拍照,选择联系人等;

注意

如果被启动的ActivtyForResult是singleTask模式,onActivityForResult()方法回立即执行;

startActivityForResult ()方法在onCreate()或onResume()方法中被调用,直到结果返回前该Activity都不会展现;

requestCode:

requestCode 必须大于或等于0,否则sendMessage(H.SEND_RESULT, res)方法不会执行

resultCode:

结果调用传回原Activity中,通常RESULT_CANCELED,RESULT_OK,RESULT_FIRST_USER;

2.A 启动 B ,B 中何时执行 setResult ? setResult 是否可以位于 finish 之后?

setResult()方法放在finish()方法之前执行,一般置于onCreate()或者onResume()方法中;

private void finish(int finishTask) {

if (mParent == null) {

int resultCode;

Intent resultData;

synchronized (this) {

resultCode = mResultCode;

resultData = mResultData;

}

if (false) Log.v(TAG, "Finishing self: token=" + mToken);

try {

if (resultData != null) {

resultData.prepareToLeaveProcess(this);

}

if (ActivityManagerNative.getDefault()

.finishActivity(mToken, resultCode, resultData, finishTask)) {

mFinished = true;

}

} catch (RemoteException e) {

// Empty

}

} else {

mParent.finishFromChild(this);

}

}

从finish()源码中可以看到finish()方法中有对resultCode以及resultData的操作;因此不能将setResult方法放在finish()方法之后;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值