Android onActivityResult获取返回值的用法
2015-08-12 11:01
453 查看
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传回来的键对应的值。
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;
总结:本来我只是想使用一下显示intent启动Activity的方式,后来我又自己扩展了隐式intent启动Activity。
总之,碰到问题,要多思考,不要拘泥在一个点上,这样自己才会真正的进步。
如果大家有什么更好的建议和看法,一定要提出来,互相切磋,共同进步是我们技术宅最大的愿望啊,很高兴和大家分享!
PS:要有扩展性的思维,多想多做。
分类: 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传回来的键对应的值。
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;
总结:本来我只是想使用一下显示intent启动Activity的方式,后来我又自己扩展了隐式intent启动Activity。
总之,碰到问题,要多思考,不要拘泥在一个点上,这样自己才会真正的进步。
如果大家有什么更好的建议和看法,一定要提出来,互相切磋,共同进步是我们技术宅最大的愿望啊,很高兴和大家分享!
PS:要有扩展性的思维,多想多做。
相关文章推荐
- Android 事件分发机制解析之View的事件分发
- Android实现多个倒计时优化与源码分析
- 解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
- AndroidUnusedResources,清理不需要的资源
- android中dip、dp、px、sp和屏幕密度
- android 5.0 下载编译
- Android 获取系统联系人并排序
- Android开机自启动service,并不启动activity
- android图片缓存之内存缓存技术LruCache,软引用
- Android动画详解
- android与JS交互
- android 关于view的onTouch和onClick同时触发解决方案
- android 传感器必知必会(下)
- 千锋扣丁学堂 七夕活动等你来参与
- Android实现两个ScrollView互相联动,同步滚动的效果
- Android实现两个ScrollView互相联动,同步滚动的效果
- Android(Lollipop/5.0) Material Design(七) 自定义动画
- Android相关修改教程
- Android项目中如何用好构建神器Gradle
- Android Studio 编译Gradle提示编码错误