关于startActivityForResult

1. startActivityForResult的使用场景是什么?onActivityResult回调里面的resultCode和requestCode含义是什么?
  • 当A activity打开B activity时,需要从B activity返回数据给A activity时,必须调用startActivityForResult。

  • requestCode:请求码。请求码的值是根据业务需求由自己决定,用来标识请求的来源。确定返回的数据是来自哪个activity。

  • resultCode:结果码。决定返回结果的类型,一般为系统默认的RESULT_OK或者RESULT_CANCELED

2. Activity A启动B的时候,在B中何时该执行setResult ?setResult可以位于Activity的finish方法之后吗?
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中看出finish()里的resultCode和resultData的值是在setResult调用后才获取的,不然值会为空。
  • 所以setResult一般是在onBackPressed中调用,而且必须是在super.onBackPressed()之前。或者根据业务情景,显示调用setResult,然后finish()。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值