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 ...
随机推荐
- JavaScript流程控制及函数
1 流程控制 1.1 条件语句 分支结构 单向分支 if (条件表达式) { code...} 双向分支 if (条件表达式){ } else { } <!DOCTYPE html& ...
- Security1:登录和用户
授予权限的思路,可以用一句话来概括,那就是:授予 Principal 操作 Securable 的 Permission,在多数文档中,把 Principal 翻译为安全主体,Securable翻译为 ...
- 【JUC源码解析】ForkJoinPool
简介 ForkJoin 框架,另一种风格的线程池(相比于ThreadPoolExecutor),采用分治算法,工作密取策略,极大地提高了并行性.对于那种大任务分割小任务的场景(分治)尤其有用. 框架图 ...
- Zabbix实战-简易教程--订阅类
一.需求提出 最近数据中心有一个新的需求,有一批后台任务需要在每天固定时间点运行(凌晨8:00),现在希望能够把这个任务执行的结果定时上报给他. 说明:执行的任务为一个sql查询,查询出来的是每个任务 ...
- GGTalk——C#开源即时通讯系统源码介绍系列(一)
坦白讲,我们公司其实没啥技术实力,之所以还能不断接到各种项目,全凭我们老板神通广大!要知道他每次的饭局上可都是些什么人物! 但是项目接下一大把,就凭咱哥儿几个的水平,想要独立自主.保质保量保期地一个个 ...
- YouTube视频下载方法汇总
YouTube是一个视频共享网站,YouTuber们自己拍摄并制作视频,上传到YouTube,然后用户观看.分享并评论这些内容.虽然在线观看很方便,但是有些时候你却只能处于离线的状态,比如出差.旅游. ...
- Appium知识积累
1.使用uiautomatorviewer 可以直接在命令行输入uiautomatorviewer,打开获取屏幕截图工具,连接手机,打开所要获取包名的应用,然后获取其截图,根据截图查看package即 ...
- 阿里云服务器ECS上ubuntu安装nginx后默认站点页面打开错误,显示无法访问此网站
问题:在新买的阿里云服务器ECS上安装nginx后打开默认页面失败,如下图所示. 系统环境:Ubuntu 16.04.4 LTS64版本. 步骤回顾: root用户下运行命令 apt-get inst ...
- TPO-20-Apply for the undergraduate research fund
/* 加粗:语音部分 * 红色:单词部分 * 斜体:语法部分 * 下划线:信号词/句 */ 第 1 段 1.Listen to a conversation between a ...
- opengl-glsl
GLSL 着色器是使用一种叫GLSL的类C语言写成的.GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性. 着色器的开头总是要声明版本,接着是输入和输出变量.uniform和mai ...