android intent 返回值,Android onActivityResult获取返回值的用法

现有 MainActivity,当它进入到 SecondActivity 后,在 SecondActivity 中进行了某些操作然后需要将值返回给 MainActivity 时,就需要用到 onActivityResult() 这个方法了,下面呢,我就具体来介绍一下用法。

不过在这之前,先讲一下intent的用法:

对于intent主要的分类主要包括隐式意图和显式意图。显式意图通常主要是启动本应用中的Activity之间的数据,而隐式意图则常见于启动系统中的某些特定的动作,比如打电话,或者是跨应用的Activity启动。

一般来说:

显式意图:调用 Intent.setComponent() 或 Intent.setClass() 方法明确指定了组件名的 Intent 为显式意图,显式意图明确指定了 Intent 应该传递给哪个组件。

隐式意图:没有明确指定组件名的 Intent 为隐式意图。 Android 系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

MainActivity里面的主要代码

(1)当需要返回值时,那么在启动另一个Activity时要用到startActivityForResult(intent, REQUEST_CODE);

注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,由此来判断是启动的某个Activity。

(2)onActivityResult()方法中的第二个参数就是SecondActivity传回来的键,第三个参数就是SecondActivity传回来的键对应的值。

finalintRESULT_CODE=101;

finalintREQUEST_CODE=1;

publicvoidenterSecond(View view) {

Intent intent=newIntent(this,SecondActivity.class);

startActivityForResult(intent, REQUEST_CODE);

}

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) {

Log.i(TAG, "onActivityResult"+"requestCode"+requestCode+"\n resultCode="+resultCode);

if(requestCode==REQUEST_CODE) {

if(resultCode==RESULT_CODE) {

String result=data.getStringExtra("second");

textView.setText(result);

}

}

super.onActivityResult(requestCode, resultCode, data);

}

SecondActivity 类中的代码:

这个里面的 RESULT_CODE、intent 分别跟上段代码中 onActivityResult() 方法中的第二个、第三个参数相对应。

finalintRESULT_CODE=101;

publicvoidcloseButton(View view) {

Intent intent=newIntent();

intent.putExtra("second","I am second!");

setResult(RESULT_CODE, intent);

finish();

}

补充说明

onActivityResult() 方法中的第二个参数 resultCode 还有系统自带的一些参数,也就是说,如果我们启动的 intent 是隐式意图,那么可以用 Activity 类中 RESULT_OK 来表示操作已经顺利结束。

例如,调用系统图库的返回,请看代码:

finalintCROP_PIC_REQUESTCODE =23;

finalintSELECT_PICTURE =21;

if(resultCode == RESULT_OK && requestCode == SELECT_PICTURE) {

System.out.println("调用图库返回,关闭activity");

Intent intent1 = newIntent("com.android.camera.action.CROP");

intent1.setDataAndType(data.getData(), "image/*");

intent1.putExtra("crop","true");

intent1.putExtra("aspectX",1);

intent1.putExtra("aspectY",1);

intent1.putExtra("outputX",80);

intent1.putExtra("outputY",80);

intent1.putExtra("return-data",true);

startActivityForResult(intent1, CROP_PIC_REQUESTCODE);

}

当然,我们还可以看下源码中还有哪些类似 RESULT_OK 的。

/** Standard activity result: operation canceled. */

publicstaticfinalintRESULT_CANCELED =0;

/** Standard activity result: operation succeeded. */

publicstaticfinalintRESULT_OK = -1;

/** Start of user-defined activity results. */

publicstaticfinalintRESULT_FIRST_USER =1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值