简化Android的startActivityForResult调用
一个是解决在onActivityResult
中判断requestCode的问题,第二个是让调用代码的地方就知道我是如何处理对方activity
的返回的。 首先我们有一个ResultActivityAdaptor,这个就封装了我的主要的逻辑
public class ResultActivityAdaptor {
/**
* 起始requestCode,用于兼容有一些老的逻辑,不让request code冲突
*/
private final static int REQUEST_CODE_START=20000;
//记录每一次请求的回调方法
private SparseArray<ResultActivityListener> requests=new SparseArray<ResultActivityListener>();
private Activity mActivity;
//记录下一个请求的时候会生成的REQUEST_CODE
private int currentReqCode=REQUEST_CODE_START;
/**
* 测试
*/
public ResultActivityAdaptor(Activity activity) {
this.mActivity = activity;
}
/**
* @param i
* @param listener
*/
public void startActivityForResult(Intent i, ResultActivityListener listener){
currentReqCode++;
requests.put(currentReqCode,listener);
mActivity.startActivityForResult(i,currentReqCode);
}
/**
* 调用
* @param requestCode
* @param resultCode
* @param data
*/
public boolean onResult(int requestCode,int resultCode,Intent data){
ResultActivityListener listener=requests.get(requestCode);
if(listener!=null) {
listener.onResult(requestCode, resultCode, data);
//请求完就清除掉
requests.remove(requestCode);
return true;
}
return false;
}
}
public interface ResultActivityListener {
public void onResult(int requestCode,int resultCode,Intent data)
}
然后我们可以对我们的activity做如下的封装
/**
* BaseActivity
*/
public class BaseActivity extends Activity {
protected ResultActivityAdaptor mResultActivityAdaptor=new ResultActivityAdaptor(this);
protected void startActivityWithCallback(Intent intent, ResultActivityListener listener) {
mResultActivityAdaptor.startActivityForResult(intent, listener);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mResultActivityAdaptor.onResult(requestCode,resultCode,data);
}
/**
* 打开系统的图片选择
*/
protected void openSystemImageGallary(ResultActivityListener listener){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityWithCallback(intent, listener);
}
}
这样封装之后,我们可以看到,我们在BaseActivity中调用代码的时候会轻松很多了,
一个是我们给用户隐藏了REQUEST_CODE的这种概念,第二个是我们把我们的调用操作
和我们的回调操作绑定到了一起,在代码阅读和重构/copy的时候带来了很大的便利性
http://www.fanjun.me/?p=582
简化Android的startActivityForResult调用的更多相关文章
- Android Fragment StartActivityForresult调用实例
fragment里面的onActivityResult 怎样才能被调用,很简单,就一句话, startActivityForResult(intent, getActivity().RESULT_FI ...
- 使用Frida简化Android端应用安全测试
@author : Dlive 在对Android应用进行Web漏洞测试时,经常遇到一种情况:HTTP传输的数据带有签名字段 处理这种情况的方法通常是逆向签名算法,但是如果算法在so中,而且so加壳了 ...
- Android之startActivityForResult
作用:当aAty跳转之bAty时,需要bAty回传数据,使用startActivityForResult. 相关的函数: aAty:--跳转至bAty(intent可以传递数据) void andro ...
- Android上传图片之调用系统拍照和从相冊选择图片
Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015 ...
- 在Android开发中调用Rest web服务(转)
首先从维基百科上拷贝一点Rest的基本概念给大家看看,然后我们再开始详解在Android中如何调用Rest服务.表象化状态转变(英文:Representational State Transfer,简 ...
- Android之startActivityForResult的使用
在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A ...
- Android 使用AIDL调用外部服务
好处:多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作, 本文包括: 1 .创建AIDL 服务端.2 .创建AIDL 客户端. 3.客户端调用服务端提供的 ...
- Android使用KSOAP2调用WebService及正确导入jar包的问题(转)
Android使用KSOAP2调用WebService及正确导入jar包的问题(转) 错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
随机推荐
- 滑雪与时间胶囊(bzoj 2753)
Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...
- poj 1081 To The Max
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 应用express mockjs模拟前端json数据接口
一.首先需要在项目安装express 1.cnpm install express --save-dev 2.cnpm install mockjs --save-dev 二.在项目根目录下新建pr ...
- 内核的bootmem内存分配器【转】
转自:http://blog.csdn.net/zmxiangde_88/article/details/8041040 版权声明:本文为博主原创文章,未经博主允许不得转载. 在内核启动期间,伙伴系统 ...
- 矢量图和Word:EPS,PDF,EMF和SVG
1.EMF和Word 在学校的时候,我思考过一个问题,论文中的插图如何保证清晰度.关键之一就是使用矢量图.参考知乎问题:如何在论文中画出漂亮的插图?.常见的矢量图包括:EPS,EMF和SVG.SVG适 ...
- LeetCode OJ-- Trapping Rain Water*
https://oj.leetcode.com/problems/trapping-rain-water/ 模拟题,计算出在凹凸处存水量. 对于一个位置 i ,分别计算出它左边的最大值 left (从 ...
- AC日记——Dishonest Sellers Codeforces 779c
C. Dishonest Sellers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- HOJ - 2543最小费用流
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2543 这个题目挺有意思. 自己扣了一会儿,发现图挺好建,就把(u,v,f,w) 拆成(u,v,f,0) ...
- mysql中TIMESTAMPDIFF简单记录
1. Syntax TIMESTAMPDIFF(unit,begin,end); 根据单位返回时间差,对于传入的begin和end不需要相同的数据结构,可以存在一个为Date一个DateTime 2 ...
- HDU 4081 Qin Shi Huang's National Road System 最小生成树+倍增求LCA
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4081 Qin Shi Huang's National Road System Time Limit: ...