您的位置:首页 > 移动开发 > Android开发

Android onActivityResult获取返回值的用法

2016-01-18 14:33 447 查看
现有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传回来的键对应的值。

    final int RESULT_CODE=101;

    final int REQUEST_CODE=1;

    public void enterSecond(View view) {

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

        startActivityForResult(intent, REQUEST_CODE);

    }

    

    @Override

    protected void onActivityResult(int requestCode, int resultCode, 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);

    }

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

final int RESULT_CODE=101;

    public void closeButton(View view) {

        Intent intent=new Intent();

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

        setResult(RESULT_CODE, intent);

        finish();

    }

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

final int CROP_PIC_REQUESTCODE = 23;

final int SELECT_PICTURE = 21;

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

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

            Intent intent1 = new Intent("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. */

    public static final int RESULT_CANCELED = 0;

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

    public static final int RESULT_OK = -1;

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

    public static final int RESULT_FIRST_USER = 1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: