Android onActivityResult获取返回值的用法

2014-03-09 00:08:15

分类: Android平台

现有MainActivity,当它进入到SecondActivity后,在SecondActivity中进行了某些操作然后需要将值返回给MainActivity时,

于是就可以用到onActivityResult() 这个方法了,下面呢,我就具体来介绍一下用法。

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

对于intent主要的分类主要包括隐式意图和显式意图。显式意图通常主要是启动本应用中的Activity之间的数据,

而隐式意图则常见于启动系统中的某些特定的动作,比如打电话,或者是跨应用的Activity启动。

一般来说:

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

隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、

数据(URI和数据类型)找到最合适的组件来处理这个意图。

1、MainActivity里面的主要代码

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

注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,

由此来判断是启动的某个Activity。

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

第三个参数就是SecondActivity传回来的键对应的值。

  1. final
    int RESULT_CODE=101;
  2. final int REQUEST_CODE=1;
  3. public void enterSecond(View
    view)
    {
  4. Intent intent=new Intent(this,SecondActivity.class);
  5. startActivityForResult(intent, REQUEST_CODE);
  6. }
  7. @Override
  8. protected
    void onActivityResult(int requestCode,
    int resultCode, Intent data)
    {
  9. Log.i(TAG,
    "onActivityResult"+"requestCode"+requestCode+"\n resultCode="+resultCode);
  10. if(requestCode==REQUEST_CODE)
    {
  11. if(resultCode==RESULT_CODE)
    {
  12. String
    result=data.getStringExtra("second");
  13. textView.setText(result);
  14. }
  15. }
  16. super.onActivityResult(requestCode, resultCode, data);
  17. }

2、SecondActivity 类中的代码:

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

  1. final
    int RESULT_CODE=101;
  2. public void closeButton(View
    view)
    {
  3. Intent intent=new Intent();
  4. intent.putExtra("second",
    "I am second!");
  5. setResult(RESULT_CODE, intent);
  6. finish();
  7. }

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

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

  1. final int CROP_PIC_REQUESTCODE = 23;
  2. final int SELECT_PICTURE = 21;
  3. if
    (resultCode == RESULT_OK
    && requestCode
    == SELECT_PICTURE)
    {
  4. System.out.println("调用图库返回,关闭activity");
  5. Intent intent1 =
    new Intent("com.android.camera.action.CROP");
  6. intent1.setDataAndType(data.getData(),
    "image/*");
  7. intent1.putExtra("crop",
    "true");
  8. intent1.putExtra("aspectX", 1);
  9. intent1.putExtra("aspectY", 1);
  10. intent1.putExtra("outputX", 80);
  11. intent1.putExtra("outputY", 80);
  12. intent1.putExtra("return-data", true);
  13. startActivityForResult(intent1, CROP_PIC_REQUESTCODE);
  14. }

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

  1. /** Standard activity result: operation canceled. */
  2. public static
    final int RESULT_CANCELED
    = 0;
  3. /** Standard activity result: operation succeeded. */
  4. public static
    final int RESULT_OK
    = -1;
  5. /** Start of user-defined activity results. */
  6. public static
    final int RESULT_FIRST_USER
    = 1;

总结:本来我只是想使用一下显示intent启动Activity的方式,后来我又自己扩展了隐式intent启动Activity。

总之,碰到问题,要多思考,不要拘泥在一个点上,这样自己才会真正的进步。

如果大家有什么更好的建议和看法,一定要提出来,互相切磋,共同进步是我们技术宅最大的愿望啊,很高兴和大家分享!

PS:要有扩展性的思维,多想多做。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-10 21:27:41

Android onActivityResult获取返回值的用法的相关文章

Android中onActivityResult()获取返回值

需求:从FirstActivity跳到SecondActivity,在SecondActivity中进行了操作并返回到FirstActivity. FirstActivity中的主要代码: private static final int REQUEST_CODE = 1; private static final int RESULT_CODE = 101; //触发事件 public void gotoSencond(){ Intent intent=new Intent(this,Seco

【黑马Android】(07)多线程下载的原理/开源项目xutils/显示意图/隐式意图/人品计算器/开启activity获取返回值

多线程下载的原理 司马光砸缸,多开几个小水管,抢救小朋友. import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import

工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码如下: # TestGroovy.groovy 定义testC方法,传入3个参数,返回处理后的数据 def testC(int numA, int numB, int numC) { "传入参数:" + numA + numB + numC + "计算之和为:" + (

在Java 线程中返回值的用法

http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread 有时在执行线程中需要在线程中返回一个值:常规中我们会用Runnable接口和Thread类设置一个变量:在run()中改变变量的值,再用一个get方法取得该值,但是run何时完成是未知的:我们需要一定的机制来保证. 在在Java se5有个Callable接口:我们可以用该接口来完成该功能: 代码如: Java代码   package com.thr

java多线程之从任务中获取返回值

package wzh.test; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; class TaskWithResult implements Callable<Strin

获取存储过程返回值及代码中获取返回值

获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO [Order](o_buyerid )VALUES (@o_buyerid )SET @o_id = @@IDENTITYENDEND 存储过程中获得方法: D

动态Tsql 获取返回值

使用Execute 和 sp_executesql实现动态Tsql,如何获取动态tsql的返回值? 第一部分:execute 1,Execute是个函数,能够执行sql语句,示例语句如下 declare @sql nvarchar(max) declare @return_cnt int if object_id('tempdb..#tempcnt') is not null drop table #tempcnt create table #tempcnt(cnt int) set @sql=

expect获取返回值

对于获取多台服务器状态且不用交互需要用到expect,但有时候expect无法获取返回值,这里解释一下expect如何获取返回值 expect -c " spawn $1; expect { \"(yes/no)?\" {send \"yes\n\";expect \"assword:\";send \"$2\n\"} \"assword:\" {send $2\n} eof } expect e

打开模态窗体,并获取返回值

1 //编辑 2             function btnEdit(keyid,sysName,mark) { 3                 //  打开模态窗体,并获取返回值 4                 var returnValue = window.showModalDialog('FileChange_SystemEdit.aspx?sysName=' + sysName + '&keyid=' + keyid + '&mark=' + mark, '', '