startActivityForResult
Activity提供了startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了能得到传回的数据,必须在旧的Activity中覆写onActivityResult(int requestCode, int resultCode, Intent data)方法,onActivityResult方法的回调时机是:You will receive this call immediately before onResume() when your activity is re-starting。大概是说当旧的Activity重新启动(获得焦点,开始与用户交互)时,在回调onResume()方法前会立刻调用此方法。
新的Activity返回的数据通过Intent进行传递,当新的Activity关闭后,旧的Activity就会调用onActivityResult()方法,把存放了返回数据的Intent作为onActivityResult()方法的第三个参数传入,在onActivityResult()方法通过使用第三个参数就可以获取到新的Activity返回的数据。
新的Activity返回数据要通过setResult(int resultCode,Intent data), 第一个参数是请求码,第二个参数是携带返回数据的Intent。
请求码(requestCode)的作用:
使用startActivity(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要自由设定的,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是哪个按钮打开新的Activity,当这个新的Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法,在onActivityResult()方法如果需要知道新的Activity是由哪个按钮打开的,并且要做出相应的业务处理,这时可以这样做:
- @Override public void onCreate(Bundle savedInstanceState) {
- ....
- button1.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
- }
- });
- button2.setOnClickListener(new View.OnClickListener(){
- public void onClick(View v) {
- startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);
- }
- });
- @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()方法。为了知道返回的数据来自于哪一个新的Activity,在onActivityResult()方法中可以这样做:
(New1Activity和New2Activity是要打开的新的Activity)
- public class New1Activity extends Activity{
- ......
- New1Activity.setResult(1 , intent);
- finish();
- }
- public class New2Activity extends Activity{
- ......
- New2Activity.setResult(2,intent);
- finish();
- }
- public class MianActivity extends Activity{
- //在该Activity中,会打开上面的两个Activity
- ...........
- @Override
- protected void onActivityResult(int requestCode,int resultCode,Intent data){
- switch(resultCode){
- case 1:
- //获取New1Activity的返回数据
- case 2:
- //获取New2Activity的返回数据
- }
- }
- }
startActivityForResult的更多相关文章
- 使用startActivityForResult场景模拟
效果图如下,当我从第一个界面选择供应商的时候,我希望能得到第二个界面选择的供应商的值: 具体代码,这里第二个参数为自定义的大于等于0的数字,用来标记当前跳转. Intent i1 = new Inte ...
- 浅谈Android中的startActivityForResult和setResult方法
引言 我们知道,如果想打开一个新的Activity我们可以使用startActivity方法.今天我们介绍的startActivityForResult不仅可以打开全新的Activity,而且当新的A ...
- android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法
在android项目中经常会用startactivityforresult从一个Activity跳转到另一个Activity(这里指Activity_A和Activity_B),你可以从Activit ...
- Android基础:startActivityForResult 和 onActivityResult 问题
项目中用到弹出Acitivity来获得用户输入 所以用到 onActivityResult()方法接受用户输入 奇怪问题 startActivityForResult() 后直接调用 onActivi ...
- Fragment的startActivityForResult和Activity的startActivityForResult的区别
2016-08-30 18:22:33 前提:我们的APP要兼容Api level 11以前的,所以必须用FragmentActivity 1.对于Fragment的,我们很多时候都会在Activit ...
- [Android]Activity跳转传递任意类型的数据、Activity为SingleTask时代替StartActivityForResult的解决方案
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4389674.html 需求:在ActivityA跳转到Acti ...
- Fragment的startActivityForResult详细解决方案
由于要用到Fragment中startActivityForResult,所以一开始就直接用activity.startActivityForResult(intent, 0);发现这样用首先会跳转到 ...
- 调用startActivityForResult,onActivityResult无响应的解决办法
三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...
- 回传数据startActivityForResult()
1.调用者Activity01开启新的界面选用startActivityForResult(intent,requestCode);在Activity01中Intent intent=new Inte ...
- android小知识之fragment中调用startActivityForResult(Intent intent,int requestcode)所遇到的问题
大家都知道对于Activity和Fragment都可以注册OnActivityResult()方法,但是要注意几点: a.当activity和fragment都注册了OnActivityResult( ...
随机推荐
- Visual studio code (vscode)
调东西 : 左上角 File -> Preferences -> Workspace Settings ( User Settings 也可以, 它是 for 所有的 project, W ...
- Libpcap
http://www.ibm.com/developerworks/cn/linux/l-libpcap/ http://www.linuxdevcenter.com/pub/a/linux/2003 ...
- Black Box
http://poj.org/problem?id=1442 #include<cstdio> #include<algorithm> #include<queue> ...
- 通过示波器分析TypeB卡通讯数据
这几天,使用NFC芯片模拟了一张TypeB的cpu卡,在调试过程中,因为要检查射频性能,所以用示波器抓取了RFID读卡器和TypeB CPU卡之间的通讯数据.READER发送的数据位106K ASK调 ...
- DEDECMS调用最新评论
{dede:feedback row='5' titlelen='24' infolen='80'} <div class="yhplk"><div>[fi ...
- 【转】byte[]数组比较(内容比较)--不错
原文网址:http://amanda.blog.51cto.com/7238262/1215118 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责 ...
- 【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/14450809 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- 【二分】Codeforces 706B Interesting drink
题目链接: http://codeforces.com/problemset/problem/706/B 题目大意: n (1 ≤ n ≤ 100 000)个商店卖一个东西,每个商店的价格Ai,你有m ...
- oracle number 和sqlserver numeric的区别
number如果不指定范围默认是可以输入所有位数的小数,numeric如果不指定小数默认是不允许输入小数
- C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service
一:用ASP.NET调用Web Service 打开VS2010,打开“文件-新建-网站”,选择“ASP.NET网站” 选好存储位置,语言后点击确定,进入默认页面.然后先添加Web引用,把WebSer ...