一个是解决在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调用的更多相关文章

  1. Android Fragment StartActivityForresult调用实例

    fragment里面的onActivityResult 怎样才能被调用,很简单,就一句话, startActivityForResult(intent, getActivity().RESULT_FI ...

  2. 使用Frida简化Android端应用安全测试

    @author : Dlive 在对Android应用进行Web漏洞测试时,经常遇到一种情况:HTTP传输的数据带有签名字段 处理这种情况的方法通常是逆向签名算法,但是如果算法在so中,而且so加壳了 ...

  3. Android之startActivityForResult

    作用:当aAty跳转之bAty时,需要bAty回传数据,使用startActivityForResult. 相关的函数: aAty:--跳转至bAty(intent可以传递数据) void andro ...

  4. Android上传图片之调用系统拍照和从相冊选择图片

    Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015 ...

  5. 在Android开发中调用Rest web服务(转)

    首先从维基百科上拷贝一点Rest的基本概念给大家看看,然后我们再开始详解在Android中如何调用Rest服务.表象化状态转变(英文:Representational State Transfer,简 ...

  6. Android之startActivityForResult的使用

    在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A ...

  7. Android 使用AIDL调用外部服务

    好处:多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作, 本文包括: 1 .创建AIDL 服务端.2 .创建AIDL 客户端. 3.客户端调用服务端提供的 ...

  8. Android使用KSOAP2调用WebService及正确导入jar包的问题(转)

    Android使用KSOAP2调用WebService及正确导入jar包的问题(转)     错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代 ...

  9. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

随机推荐

  1. bzoj3997[TJOI2015]组合数学(求最长反链的dp)

    组合数学 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...

  2. 在vue路由当中使用keep-alive避免多次加载组件,减少消耗

    今天在vue当中使用了full-page这个组件.但是发现在每次路由跳转完之后,再回到使用fullpage的这个页面,fullpage会报错,fullpage只能初始化一次. 这个时候给路由使用kee ...

  3. GridControl 控制列中的控件显示

    一.需求描述 根据条件判断Checkbox的显示,先上个图,, 类似Demo中的这个,因为不能控制文本的显示,所以需对该列的其它事件做些处理,  二.解决方案 1.添加GridControl上需要的控 ...

  4. hdu 2078(DFS)

    Matrix Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 3845   Accepted: 1993 Descriptio ...

  5. Widows下利用OpenSSL生成证书

    1.下载OpenSSL的windows版本 32位:openssl-1.0.2a-i386-win32.zip 64位:openssl-1.0.2a-x64_86-win64.zip 下载之后解压即可 ...

  6. jenkins集群节点构建maven(几乎是坑最多的)

    业务量变大时,单台的jenkins进行自动化构建部署,就显得没那么灵活,jenkins的集群并非像web服务器.mysql集群那样,jenkins的集群无需在额外的主机安装jenkins,但是用于ja ...

  7. 转:PHP 生成复杂JSON格式 简单快速方法

    PHP 生成JSON 格式主要使用json_encode()函数.这个函数的输入参数支持PHP数组和对象类型. 查阅网上的例子通常都是使用数组的,也有个别使用对象生成.但实际项目中,我们要生成的JSO ...

  8. ARM 浮点运算

    转载: http://www.embedu.org/Column/Column821.htm http://blog.sina.com.cn/s/blog_602f87700100r5xe.html ...

  9. python设置utf-8为默认编码

    当使用Python编程时,编码问题一直很让人头疼,程序中经常会碰到如下错误提示: UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in ...

  10. Spring 与 MyBatis 整合

    一.实验介绍 1.1 实验内容 本节课程将整合 Spring 和 MyBatis,并采用 Junit 进行单元测试. 1.2 实验知识点 Spring - MyBatis 整合 Junit 单元测试 ...