android开发教程之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。
publicclassMainActivityextendsActivity{
publicstaticfinalintREQUEST_A=1;
publicstaticfinalintREQUEST_B=2;
privateButtonbtnA=null;
privateButtonbtnB=null;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//findViewById()云云
//A按钮的监听器
btnA.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//跳转到ActivityA页面
Intenti=newIntent(MainActivity.this,ActivityA.class);
//发送请求代码REQUEST_A
startActivityForResult(i,REQUEST_A);
}
});
//B按钮的监听器
btnB.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//跳转到ActivityB页面
Intenti=newIntent(MainActivity.this,ActivityB.class);
//发送请求代码REQUEST_B
startActivityForResult(i,REQUEST_B);
}
});
}
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//先判断是哪个页面返回过来的
switch(requestCode){
caseREQUEST_A:
//再判断返回过来的情况,是成功还是失败还是其它的什么……
switch(resultCode){
caseActivityA.RESULT_SUCCESS:
//成功了
break;
caseActivityA.RESULT_FAILED:
//失败了
break;
}
break;
caseREQUEST_B:
//同上……
break;
}
}
}
接下来是ActivityA.java,这个类里面具体处理一件事情。然后成功失败,把结果返回到MainActivity里面就行了。
publicclassActivityAextendsActivity{
publicstaticfinalintRESULT_SUCCESS=0;
publicstaticfinalintRESULT_FAILED=1;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//找控件各种……
//我正在干些事情,修改数据啊,各种啊。
//假设数据提交失败了
booleanresult=false;
//设置返回的结果,常量上面都定义好了
if(result){
setResult(RESULT_SUCCESS);
}else{
setResult(RESULT_FAILED);
}
//结束,返回到MainActivity了
finish();
}
}
相关文章
- android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法
- iphone4装android,iPhone4可安装Android实现双系统启动.pdf
- android scaleanimation动画,Android 的ScaleAnimation 缩放动画基本运用
- 8个hybridapp开发工具_android hybrid
- 分享一例Android内存碎片OOM
- Android resource linking failed_android sdk location should not
- Android开发笔记(一百九十)增强了日志功能的第二版Logcat
- Android下tun0网络的检测方法
- 软件测试|一键搞定centos7的docker+selenium+appium+jenkins+android_app源码打包成apk的环境搭建
- 【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件)
- 【Android 内存优化】自定义组件长图组件 ( 自定义组件构造方法 )
- 【错误记录】Android Studio 编译报错 ( Invalid main APK outputs : EarlySyncBuildOutput )
- 【Android 逆向】ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
- 【Android UI】贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )
- Android资源混淆打包方案详解手机开发
- Android 服务详解手机开发
- Android 判断ListView滑动方向详解编程语言
- 安卓编年史(14):Android 2.3 Gingerbread——第一次 UI 大变
- Android开发笔记改变字体颜色的三种方法
- android加载本地联系人实现方法
- Android异步获取网络图片并处理导致内存溢出问题解决方法
- Android应用内调用第三方应用的方法
- android通过gps获取定位的位置数据和gps经纬度
- android开发教程之判断是手机还是平板的方法
- Android下Activity全屏显示实现方法
- Android中监听判断网络连接状态的方法
- Android上使用ZXing识别条形码与二维码的方法
- Android按钮单击事件的四种常用写法总结