startActivityForResult()的用法(超好用啊)
最近做的一个小东西遇到这样的情况,我从一个页面MainActivity修改一些内容,需要跳转到一个新的EditActivity去做修改操作,修改完成后就回到之前的MainActivity,因为信息被修改了,最好还是从服务器上重新获取一下,那么就要在MainActivity里重新获取,假如把重新获取数据的操作放在MainActivity的onStart()方法里,那么MainActivity跳转到其它的地方再回来不需要请求数据的,它也必然会又请求一次,这样就白白的增大了服务器的压力。
也就是说,要能有一个东西能判断,是从哪里跳转回到MainActivity的,这样就能判断是否需要重新进行网络请求了。
这里就要介绍startActivityForResult()方法了。
startActivityForResult(Intent, int)
第一个参数Intent,和普通的startActivity()里的Intent一样,里面放要请求的Activity和可能需要放的数据。
第二个参数int,是一个请求代码,整型的,这个可以自己随便定义,但这个数要大于等于0才行。因为MainActivity有可能会跳转到多个页面,如果这几个页面使用完之后,都需要返回一些信息,那么就必须要有个标识符来表示返回来过的是哪个页面的信息。
第二个方法:
setResult(int),setResult(int, Intent)
第一个参数int,是一个返回代码,整型的,这个也是自己随便定义,用来表示这个页面执行之后是个什么情况,是成功还是失败了,还是其它什么的,反正返回一个整型数,自己知道它的含义就行了。
第二个可选参数是一个Intent,可以用来存放数据。
第三个方法:
onActivityForResult(int, int, Intent)
这个方法是请求的Activity完成任务被finish()之后,会调用这个,前提是,你启动那个Activity是通过startActivityForResult()来启动的。
第一个参数int,是请求代码,就是startActivityForResult()里面的请求代码。
第二个参数int,是返回代码,就是setResult()方法里面的设置的参数。
第三个参数Intent,就是setResult(int, Intent)里面的放置数据的Intent。
详细使用请看下面的demo。
首先是MainActivity.java文件,里面有两个按钮,分别跳转两个Activity。
public class MainActivity extends Activity {
public static final int REQUEST_A = 1;
public static final int REQUEST_B = 2;
private Button btnA = null;
private Button btnB = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//findViewById()云云
//A按钮的监听器
btnA.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//跳转到ActivityA页面
Intent i = new Intent(MainActivity.this, ActivityA.class);
//发送请求代码REQUEST_A
startActivityForResult(i, REQUEST_A);
}
});
//B按钮的监听器
btnB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//跳转到ActivityB页面
Intent i = new Intent(MainActivity.this, ActivityB.class);
//发送请求代码REQUEST_B
startActivityForResult(i, REQUEST_B);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//先判断是哪个页面返回过来的
switch (requestCode) {
case REQUEST_A:
//再判断返回过来的情况,是成功还是失败还是其它的什么……
switch (resultCode) {
case ActivityA.RESULT_SUCCESS:
//成功了
break;
case ActivityA.RESULT_FAILED:
//失败了
break;
}
break;
case REQUEST_B:
//同上……
break;
}
}
}
接下来是ActivityA.java,这个类里面具体处理一件事情。然后成功失败,把结果返回到MainActivity里面就行了。
public class ActivityA extends Activity {
public static final int RESULT_SUCCESS = 0;
public static final int RESULT_FAILED = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//找控件各种……
//我正在干些事情,修改数据啊,各种啊。
//假设数据提交失败了
boolean result = false;
//设置返回的结果,常量上面都定义好了
if (result) {
setResult(RESULT_SUCCESS);
} else {
setResult(RESULT_FAILED);
}
//结束,返回到MainActivity了
finish();
}
}
ok,说明都写在注释里了,希望对大家有所帮助。
转载请注明出处,哇哈哈哈:http://www.cnblogs.com/kross/p/3469305.html
startActivityForResult()的用法(超好用啊)的更多相关文章
- android startActivityForResult的用法
有时候我们需要把A activity提交数据给B activity处理,然后把结果返回给A 这种方式在很多种情况需要用到,比如我应用的程序需要有拍照上传的功能. 一种解决方案是 我的应用程序 〉调 ...
- startActivityForResult的用法,以及intent传递图片
开启startActivityForResult. Intent intent = new Intent(); intent.setClass(MainActivity.this, MipcaActi ...
- startActivityForResult()的用法
举例说我想要做的一个事情是,在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Act ...
- 一个调用其他activity的完整例子,使用了 onActivityResult和startActivityForResult
https://blog.csdn.net/qq_32521313/article/details/52451364 Android startActivityForResult基本用法2016年09 ...
- android基本知识(一)
今天开始更新一下android的基本知识,下面是敲代码遇到的问题. 1)我们来谈谈android.intent.category.DEFAULT的用途. 在谈这个tag的用途之前,读者要明白什 ...
- WebView与JavaScript交互--Android
转载请注明出处: http://blog.csdn.net/forwardyzk/article/details/46819925 在工作中,有一个这种需求,须要用到WebView与javascri ...
- WIN 下的超动态菜单(二)用法
WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/ ...
- 转帖: 一份超全超详细的 ADB 用法大全
增加一句 连接 网易mumu模拟器的方法 adb connect 127.0.0.1:7555 一份超全超详细的 ADB 用法大全 2016年08月28日 10:49:41 阅读数:35890 原文 ...
- startActivityForResult的使用和用法
startActivityForResult的使用和用法 startActivityForResult 和 onActivityResult在activity间传递数据 AndroidManifest ...
随机推荐
- 【BZOJ1044】[HAOI2008]木棍分割
[BZOJ1044][HAOI2008]木棍分割 题面 bzoj 洛谷 题解 第一问显然可以二分出来的. 第二问: 设\(dp[i][j]\)表示前\(i\)个,切了\(j\)组的方案数 发现每次转移 ...
- Python 安装与专属 IDE_Pycharm 安装配置、永久激活,赠汉化版!
这个为什么说是一次学生时代的经历呢,我的出发点并没有是为了吊胃口.确实,这个Python小应用,只能在学生时代用得着吧,尤其是高中和大学,如果你没有想到也没关系,看完我下面说的就会明白了. 对红蜘蛛软 ...
- mongodb原生node驱动
写在前面 最近读<node.js学习指南>,对于mongodb没有介绍太多的工作原理,但是对于一个前端开发者,即使你还没有用过这种数据库也可以让你很好的理解和使用 一本非常好的 ...
- C# 通用树形数据结构
前言 树在图论中是一种重要的图,由于其自身的许多特殊性质,也是一种重要的计算机数据结构,在很多地方都有用.但是这些树大多都是作为其他应用的内部数据结构来使用.我们无法了解这些树的详细信息,而 .Net ...
- Python学习之路目录(收藏整理)
目录 Python之路[第一篇]:Python简介和入门 Python之路[第二篇]:Python基础(一) Python之路[第三篇]:Python基础(二) Python之路[第四篇]:模块 ...
- 从零开始的Python学习Episode 19——面向对象(2)
面向对象之继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称 为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代码重用问 ...
- [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...
- tensorflow-gpu与CUDA、CUDNN的版本问题
折腾了将近两天的时间,终于搞好了,感觉把所有的坑都踩过了一遍.....泪牛满面 1.先安装CUDA,并安装,尽量不要下载最新版本的,坑,本机可以下载最新本10.0版本,但与CUDNN和tensorfl ...
- maven 添加spring/springmvc依赖项
<spring.version>4.3.18.RELEASE</spring.version> <dependencies> <!--添加spring.spr ...
- Mac 终端快捷键
ctrl+A 跳转到行开头 ctrl+E 跳转到行结尾 ctrl+U 清空当前行 Command+K 清屏 Command+→多终端页面跳转 ...