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
传回来的键对应的值。
-
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、
SecondActi
vity
类中的代码:
这个里面的
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
;
总结:本来我只是想使用一下显示intent启动Activity的方式,后来我又自己扩展了隐式intent启动Activity。
总之,碰到问题,要多思考,不要拘泥在一个点上,这样自己才会真正的进步。
如果大家有什么更好的建议和看法,一定要提出来,互相切磋,
共同进步是我们技术宅最大的愿望啊,很高兴和大家分享!
PS:要有扩展性的思维,多想多做。