- 浏览: 599460 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
startActivityForResult与startActivity的不同之处在于:
1、startActivity( )
仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity(intent)。
2、startActivityForResult(intent,requestCode)
可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult()方法。
函数说明:
1.跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)
2.重写A中的onActivityResult方法,用来接收B回传的数据。
3.在B中回传数据时采用setResult()方法,并且之后要调用finish方法。
Android activity的setResult()在什么时候调用(重点也是难点)
如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity,只有当前Activity被finish,结果才会被发送给parent的onActivityResult去处理!
如果一个activity要返回数据到启动它的那个activity,可以调用setResult()方法。那什么时候去调用setResult()方法返回数据呢?
看一下源码就明白了:
这段代码可以看出activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。
那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的
按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .
解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了
当然还可以在onCreate()就调用setResult,不过我觉得这种方法没有重写onBackPressed()方法好.
AActivity.java
BActivity.java
1、startActivity( )
仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity(intent)。
2、startActivityForResult(intent,requestCode)
可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult()方法。
函数说明:
startActivityForResult(Intent intent, Int requestCode) setResut(int resultCode, Intent intent) onActivityResult(int requestCode, int resultCode, Intent intent)
1.跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)
Intent intent=new Intent(); intent.setClass(A.this, B.class); Bundle bundle=new Bundle(); String str1="aaaaaa"; bundle.putString("str1", str1); intent.putExtras(bundle); startActivityForResult(intent, 0);//这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0
2.重写A中的onActivityResult方法,用来接收B回传的数据。
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK // RESULT_OK是android系统常量 case RESULT_OK: Bundle b=data.getExtras(); //data为B中回传的Intent String str=b.getString("str1");//str即为回传的值 break; default: break; } }
3.在B中回传数据时采用setResult()方法,并且之后要调用finish方法。
setResult(RESULT_OK, intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle //此处一定要调用finish()方法 finish();
Android activity的setResult()在什么时候调用(重点也是难点)
如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity,只有当前Activity被finish,结果才会被发送给parent的onActivityResult去处理!
如果一个activity要返回数据到启动它的那个activity,可以调用setResult()方法。那什么时候去调用setResult()方法返回数据呢?
看一下源码就明白了:
public final void setResult(int resultCode, Intent data) { synchronized (this) { mResultCode = resultCode; mResultData = data; } } public void finish() { if (mParent == null) { int resultCode; Intent resultData; synchronized (this) { resultCode = mResultCode; resultData = mResultData; } if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken); try { if (ActivityManagerNative.getDefault() .finishActivity(mToken, resultCode, resultData)) { mFinished = true; } } catch (RemoteException e) { // Empty } } else { mParent.finishFromChild(this); } }
这段代码可以看出activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。
那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的
按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .
解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了
@Override public void onBackPressed() { Log.i(TAG, "onBackPressed"); setResult(Const.LIVE_OK); super.onBackPressed(); }
当然还可以在onCreate()就调用setResult,不过我觉得这种方法没有重写onBackPressed()方法好.
AActivity.java
package com.cn.activityresult.demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainAcitvity extends Activity { private Button btn01; private TextView tv01; public static final int REQUSET = 1; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); //requestCode标示请求的标示 resultCode表示有数据 if (requestCode == MainAcitvity.REQUSET && resultCode == RESULT_OK) { String str = "账号" + data.getStringExtra(RequestActivity.KEY_USER_ID) + "\n" + "密码" + data.getStringExtra(RequestActivity.KEY_USER_PASSWORD); tv01.setText(str); } Toast.makeText( this, "requestCode=" + requestCode + ":" + "resultCode=" + resultCode, Toast.LENGTH_LONG).show(); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn01 = (Button) findViewById(R.id.btn01); tv01 = (TextView) findViewById(R.id.tv01); btn01.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainAcitvity.this, RequestActivity.class); //发送意图标示为REQUSET=1 startActivityForResult(intent, REQUSET); } }); } }
BActivity.java
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class RequestActivity extends Activity { private Button btn01; private EditText et01; private EditText et02; public static final String KEY_USER_ID="KEY_USER_ID"; public static final String KEY_USER_PASSWORD="KEY_USER_PASSWORD"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.request_activity); btn01=(Button)findViewById(R.id.btn01); et01=(EditText)findViewById(R.id.et01); et02=(EditText)findViewById(R.id.et02); btn01.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(); intent.putExtra(KEY_USER_ID, et01.getText().toString()); intent.putExtra(KEY_USER_PASSWORD, et02.getText().toString()); setResult(RESULT_OK, intent); finish(); } }); } }
- setResult.zip (47.9 KB)
- 下载次数: 0
发表评论
文章已被作者锁定,不允许评论。
-
android BaseActivity与BaseFragment的封装
2016-05-19 15:06 10371 概述 多模块Activity+多Fragment 是开发 ... -
android ScrollView常用属性
2016-05-09 09:17 728android:scrollbars 设置滚动条显示。none ... -
android RecyclerView使用及详解
2016-05-04 10:35 29231.前言 话说RecyclerView已经面市很久,也在很多 ... -
android DialogFragment 创建对话框(官方推荐)
2016-04-29 14:22 9261、 概述 DialogFragment在android 3. ... -
android Intent Flags及Task相关属性
2016-04-26 09:15 641task是一个具有栈结构的容器,可以放置多个Activity实 ... -
android SQLite具体实例应用详解(SQLiteOpenHelper)
2016-04-18 19:24 838上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们 ... -
android SQLite3常用命令&语法
2016-04-18 19:01 644sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常 ... -
android View绘制相关问题总结
2016-03-28 19:27 7041.View的绘制流程分几步 ... -
android Handler Looper MessageQueue机制的原理
2016-03-22 21:09 788andriod提供了Handler和Looper来满足线程间的 ... -
android Bitmap,BitmapFactory类图像处理
2016-03-16 16:28 2391BitMap代表一张位图,扩展名可以是.bmp或者.dib。 ... -
android 三类菜单(Option) (Context) (SubMenu)学习
2016-03-14 15:23 948在Android系统中,菜单可以分为三类:选项菜单(Optio ... -
android Sqlite数据库对象模型ORMLite框架学习
2016-03-11 15:24 729在Android项目中或多或少的都会使用数据库,为了提高我们的 ... -
android AsyncTask<参数,进度值类型,返回类型>学习
2016-03-10 14:45 1205AsyncTask和Handler对比 1 ... -
android 远程图片获取和本地缓存
2016-03-10 14:32 802概述 对于客户端——服 ... -
android onSaveInstanceState和onRestoreInstanceState学习
2016-03-10 10:08 825Android中的activity通过onSaveInst ... -
android Fragment生命周期和回退栈学习以及Fragment之间通信
2016-03-10 09:31 1554会涉及到Fragment如何产生,什么是Fragment,Fr ... -
android LruCache内存缓存学习(重写sizeOf方法)
2016-03-09 19:25 1089什么是缓存? 缓存技术原理就是把用户访问的所有对象看作一个全 ... -
android ListView中的convertView缓存及使用
2016-03-09 19:12 1736一、复用convertView 首先讲下ListView的原 ... -
android 从资源角度谈Android代码内存优化
2016-03-09 18:54 741开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么 ... -
android Toast详解以及自定义Toast例子
2016-01-28 14:15 1554Toast的用法 Toast只是一个View视图,快速的为用 ...
相关推荐
在博客“startActivityForResult Demo”中,可能还涉及了如何处理更复杂的情况,如选择图片、文件选择器等场景的使用示例,这些场景通常会涉及到Intent的类型(ACTION_PICK, ACTION_GET_CONTENT等)和权限管理。...
总的来说,`startActivityForResult`是Android应用开发中的重要组成部分,它允许不同活动之间进行数据交换和交互,为用户提供流畅的应用体验。随着Android版本的更新,开发者需要注意使用最新的API以保持最佳实践。
在Android应用开发中,`startActivityForResult()`是一个关键的方法,用于在不同的Activity之间进行数据交互。这个方法允许一个Activity启动另一个Activity,并等待返回的结果。在本篇中,我们将深入探讨`...
- 使用`startActivityForResult()`启动另一个Activity,然后在目标Activity中处理完数据后,通过`setResult()`设置返回结果,并调用`finish()`关闭当前Activity。 - 源Activity通过`onActivityResult()`方法接收并...
调用startActivityForResult()启动目标Activity,并传入Intent和一个请求码(int类型,用于区分不同的启动请求)。 ```java private static final int REQUEST_CODE = 100; startActivityForResult(intent, REQUEST...
总结一下,Android中的`startActivityForResult`和`setResult`机制是Activity间通信的一种重要方式,它允许我们在一个Activity启动另一个Activity并等待返回结果。通过正确设置请求码和结果代码,以及利用Intent传递...
通过startActivityForResult()启动Activity时,可以在目标Activity中调用setResult()设置返回结果,然后在启动Activity的代码中覆盖onActivityResult()方法,接收并处理返回的结果。 七、Activity的启动模式 ...
在Android应用开发中,有时我们需要集成拍照和图片选择功能,以提供用户更加便捷的操作体验。本文将详细讲解如何不依赖第三方库,仅通过调用系统自带的相机和相册来实现这一功能。我们将以"AddImageDemo"这个项目为...
在Android开发中,Activity是应用程序的基本构建块,用于展示用户界面和处理用户交互。当我们需要在不同的Activity之间传递数据或执行某种操作并等待结果时,就需要利用到Android的Intent机制来打开新的Activity,并...
在Android应用开发中,Activity是构成应用程序的基本组件,它代表用户界面的一个屏幕。有时,我们需要在子Activity...通过这种方式,不同Activity间的交互变得简单且灵活,极大地丰富了Android应用的功能和用户体验。
在Android应用开发中,Activity是构成应用程序的基本组件之一,它代表了用户可见并可以与之交互的屏幕。一个应用程序可能包含多个Activity,...通过熟练掌握这些概念和技巧,开发者能够构建功能丰富的Android应用程序。
3.创建一个新的Activity(demo里叫 SecondActivity )集成FragmentActivity,在清单文件里进行配置。 4. 修改新的Activity布局文件,是二维码的背景布局 <FrameLayout xmlns:android=...
这个小demo旨在帮助新手开发者理解如何在Android应用中正确使用`startActivityForResult`和`onActivityResult`进行Activity间通信。通过这种方式,你可以实现如选择图片、获取用户输入等交互功能,增强应用程序的...
6. **处理返回结果**: 如果新启动的Activity需要返回结果给原来的Activity,可以使用`startActivityForResult(Intent intent, int requestCode)`方法,并在新Activity中使用`setResult(int resultCode, Intent data)...
在Android应用开发中,Activity是用户界面的基本单元,经常需要在不同的Activity之间传递数据。"Android Activity间传值"是一...提供的AndroidDemo示例项目可能包含了这些知识点的实例代码,可以作为学习和参考的资源。
7. **StartActivityForResult**: 如果需要从新开的Activity得到返回结果,可以使用`startActivityForResult()`,并在目标Activity中使用`setResult()`设置结果,然后在原始Activity的`onActivityResult()`回调中接收...
如果需要从目标Activity获取返回值,可以使用`startActivityForResult()`方法启动Activity,并在目标Activity中调用`setResult()`设置结果,然后在原始Activity的`onActivityResult()`方法中接收结果。 总结,`...
一是使用`startActivityForResult()`启动B_APP,然后在B_APP中调用`setResult()`和`finish()`;二是B_APP可以通过共享首选项、ContentProvider或自定义BroadcastReceiver等方式将结果广播出去,由A_APP监听接收。 ...
在`startActivityForResult()`启动Activity后,目标Activity可以通过`setResult()`方法设置返回结果,如`setResult(Activity.RESULT_OK, intent);` - 调用`finish()`方法关闭目标Activity时,结果会通过`...
在本例的"dialog样式胡activity简单demo"中,我们将探讨如何创建和使用这样一个Activity。 首先,为了将一个Activity设置为对话框样式,我们需要在AndroidManifest.xml中对相应Activity进行配置。添加以下代码到...