Android开发基础 startActivityForResult()、onActivityResult()和setResult()方法之间的联系
2016-03-29 21:51
519 查看
在以前开发的时候,只是使用过,知道如果要是想从上一个Activity中得到处理的一些状态需要调用这几个方法,但是这几个方法中的参数老是记忆的很混乱,今天在开发项目的时候,忽然想到了一些东西,特意记下免得以后再忘记了。
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)
1.startActivityForResult(Intent intent, Int requestCode) 当开启一个需要返回处理结果的Activity时使用当前这个方法
示例代码:
然后在开启的Activity中进行一些数据的处理,当页面即将关闭的时候使用setResult()方法,将处理的结果码设置为第一个参数,页面的关闭需要手动调用finish()方法,如果不设置的话会无法走到onActivityResult()方法。具体情况如果有需要的小伙伴可以查看源码。
2.setResult()。设置页面处理的结果码
代码示例
3.onActivityResult()
示例代码
好了先简单的介绍这些
简介
startActivityForResult(Intent intent, Int requestCode)setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)
1.startActivityForResult(Intent intent, Int requestCode) 当开启一个需要返回处理结果的Activity时使用当前这个方法
参数1:intent 用来启动具体哪个Activity的意图(显示启动) 参数2:requestCode从字面上的意思看它叫请求码,我对这个参数的理解是用来标记具体请求的哪个页面,可以使用一个私有的静态方法来表示, 它最后要跟onActivityResult()方法中的requestCode参数进行比对,判断是否为我要请求的页面返回的数据,其实这个参数仅仅只是用在当前类, 所以用一个静态方法来表示就好了。
示例代码:
private static final int GO_MAIN_REQUEST = 1231; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mContext = this; Button btn = (Button) findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(mContext, Main3Activity.class); //这里就是简单的应用了 startActivityForResult(intent,GO_MAIN_REQUEST); } }); }
然后在开启的Activity中进行一些数据的处理,当页面即将关闭的时候使用setResult()方法,将处理的结果码设置为第一个参数,页面的关闭需要手动调用finish()方法,如果不设置的话会无法走到onActivityResult()方法。具体情况如果有需要的小伙伴可以查看源码。
2.setResult()。设置页面处理的结果码
参数1:resultCode,字面意思为结果码,我理解的含义为当前页面处理完数据后,需要返回给上一页面的具体的状态(比如说:成功了,失败了什么的) 因为这个结果码需要在onActivityResult()中跟resultCode进行比对,所以这个返回的结果码最好是定义为公共的静态变量。当然安卓也帮我定义了 三个常量,分别为成功:RESULT_OK;取消:RESULT_CANCELED;首次执行:RESULT_FIRST_USER;如果没有特殊需要可以直接使用 参数2:intent,当如果需要返回一些数据的时候,可以new一个Intent传递一些数据回上一个页面
代码示例
public static final int SUCCESS_TAG = 131; public static final int DEFEAT_TAG = 132; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); //这里写的是一些伪代码,大家明白就行 Button defeat = new Button(Main3Activity.this); Button success = new Button(Main3Activity.this); defeat.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setResult(DEFEAT_TAG); finish(); } }); success.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setResult(SUCCESS_TAG); finish(); } }); }
3.onActivityResult()
这个方法中有三个参数 参数1:requestCode请求码,用来比对哪一个Activity返回的数据 参数2:resultCode结果码,用来判断上一个页面的处理结果 参数3:data返回的数据
示例代码
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (GO_MAIN_REQUEST == requestCode) { // do something if (Main3Activity.SUCCESS_TAG == resultCode) { //do success } } }
好了先简单的介绍这些
相关文章推荐
- android常见错误一
- android常见错误一
- 客户端下载服务器视频然后播放
- [android] 采用服务录制电话&服务的生命周期
- Android - Handler is abstract, cannot be instantiated.
- Android Studio--ListView
- 【Java/Android】对回调机制的理解
- android 加载大图片
- GitHub Top 100的Android开源库
- 《Android开发艺术探索》Android中的IPC方式--未完
- Android Studio--android:descendantFocusability用法简析
- 安卓学习笔记(三)使用Intent在活动中穿梭
- Android自定义ImageView实现圆形控件显示
- Android---加载图片 解决图片过大导致的内存溢出问题
- Android 自定义View (一)
- 开发android应用需要掌握哪些知识呢?
- Android绘图drawText垂直居中与FontMetrics
- 有些头疼的Android Studio 联网配置和优化工作
- 使用 android:paddingLeft报错解决办法
- Android.mk各种文件编译汇总