Android onActivityResult获取返回值的用法

  • Post author:
  • Post category:其他



2014-03-09 00:08:15

分类: Android平台


现有MainActivity,当它进入到SecondActi



vity后,在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




()方法中的第二个参数就是


SecondActi


vity


传回来的键,







第三个参数就是


SecondActi


vity


传回来的键对应的值。



  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、


SecondActi


vity


类中的代码:






这个里面的





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:要有扩展性的思维,多想多做。



版权声明:本文为Leaning_wk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。