Android开发之Activity startActivityForResult()方法详解
2016-05-27 11:58
519 查看
Android系统可以用startActivity(…)从一个activity中启动另一个activity,我们需要用到Intent ,那么Intent是什么呢?
Intent其实就是”一个操作的意图”,可以指向不同的activity(不管是系统自带的,还是自己创建的)。
如果从一个 activityA 中指向另一个 activityB 时,activityB finish()的时候需要返回一个值给activityA,那么我们就需要用到startActivityForResult(…)方法来启动。
startActivityForResult(Intent,requestCode)方法有两个参数Intent即指定我们要转向的activity 、
requestCode 请求码,即调用startActivityForResult() 传递过去的值
resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
当activityB finish()时我们重写onActivityResult(int requestCode, int resultCode, Intent data)方法进行接收activityB 返回的值
下面就用代码详细的说明下
1.首先我们从activityA 启动到activityB
2.activityB finish() 返回值
3.activityA获取到activityB返回的值
以上的操作就可以获取到activityB返回的值了,但是可以大家还是很迷惑requestCode、与resultCode的作用,那我们就再来详细说一下两个码的作用:
requestCode:一个Activity有两个按钮,按钮1、按钮2,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理
resultCode:在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity)
Intent其实就是”一个操作的意图”,可以指向不同的activity(不管是系统自带的,还是自己创建的)。
如果从一个 activityA 中指向另一个 activityB 时,activityB finish()的时候需要返回一个值给activityA,那么我们就需要用到startActivityForResult(…)方法来启动。
startActivityForResult(Intent,requestCode)方法有两个参数Intent即指定我们要转向的activity 、
requestCode 请求码,即调用startActivityForResult() 传递过去的值
resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
当activityB finish()时我们重写onActivityResult(int requestCode, int resultCode, Intent data)方法进行接收activityB 返回的值
下面就用代码详细的说明下
1.首先我们从activityA 启动到activityB
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_a); button1 = (Button) findViewById(R.id.button1); textView = (TextView) findViewById(R.id.textView); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Activity_A.this,Activity_B.class); startActivityForResult(i, 1000); } }); }
2.activityB finish() 返回值
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_b); button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(); i.putExtra("index", "lululu1"); /* 这里我们用setResult方法resultCode返回码999 */ setResult(999, i); finish(); } }); }
3.activityA获取到activityB返回的值
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("qqq", "requestCode"+requestCode); Log.i( 4000 "qqq", "resultCode"+resultCode); Log.i("qqq", "data"+data.getStringExtra("index")); }
以上的操作就可以获取到activityB返回的值了,但是可以大家还是很迷惑requestCode、与resultCode的作用,那我们就再来详细说一下两个码的作用:
requestCode:一个Activity有两个按钮,按钮1、按钮2,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode){ case 1: //来自按钮1的请求,作相应业务处理 case 2: //来自按钮2的请求,作相应业务处理 } }
resultCode:在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity)
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(resultCode){ case 1: // ResultActivity的返回数据 case 2: // NewActivity的返回数据 } }
相关文章推荐
- Android实现表情 抓取新浪表情
- 详解Android解析Xml的三种方式——DOM、SAX以及XMLpull
- android开发环境遇到adt无法启动的问题分析及解决方法
- Android开发 旋转屏幕导致Activity重建解决方法
- Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
- Android开发技巧之ViewStub控件惰性装载
- Android开发常用经典代码段集锦
- 分享10个很棒的学习Android开发的网站
- android开发之横向滚动/竖向滚动的ListView(固定列头)
- Android开发技巧之我的菜单我做主(自定义菜单)
- Windows下使用Apache Cordova开发ANDROID之HelloWorld
- 根据根据图片的url怎么取得图片ImageView对象
- [转] ADB server didn't ACK
- android开发的相关链接
- Android数据存储之SharedPreferences 共享首选项/偏好设置
- 基于NDK的Android防破解
- 麦子学院android开发笔记:Android更换RatingBar图片
- android开发入门知识之AIDL详解
- AutoCompleteTextView组件的功能和用法