简化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调用,码迷,mamicode.com

时间: 2024-10-06 04:03:35

简化Android的startActivityForResult调用的相关文章

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

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

Android使用Intent调用摄像头并获取照片

使用Android的Intent调用另外一个activity的时候,采用的是多线程机制,异步方式.startActivityForResult之后被调用activity并没有马上返回结果给调用activity,Android的Acitivity对象中startActivityForResult的源代码中有相关的解释. /** * Launch an activity for which you would like a result?????? when it finished.?????? *

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

Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文.如今是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了. 原因呢?当然是自己的原因.事实上是有非常多时间来些博客的,可是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 如今差点儿应用都会用到上传图片的功能,而要上传图片,首先得

android 两次调用DatePickerDialog.onDateSet()

在4.2.2版本上调用系统的DatePickerDialog,发现点击确定时系统调用onDateSet()两次,需要过滤其中的一次. Calendar mCalendar = Calendar.getInstance(); mCalendar.add(Calendar.DAY_OF_YEAR, 1); final DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListe

Android的JS调用Java代码或使用了Javascript相关技术改如何混淆

http://www.androidren.com/index.php?qa=282&qa_1=android的js调用java代码或使用了javascript相关技术改如何混淆 Android 4.2开始 JS调用Java代码的时候必须加上@JavascriptInterface才能调用. 加上@JavascriptInterface之后就必须要考虑混淆时候的问题,如果混淆的时候把@JavascriptInterface搞丢了你的程序就无法调用了. 其实很简单,你只需要在混淆里面加上: -ke

Android使用ksoap2-android调用WebService学习

转自 Android使用ksoap2-android调用WebService学习 之前主要做客户端UI交互,很少处理数据和接触服务端,但现在的移动设备根本不可能离得开网络连接,数据的交换.最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台.不同语言.不同技术整合到一块,android SDK没有直接调用webservice的库,最常用的是借助ksoap

分享一个Android和java调用RESTful Web服务的利器Resting

分享一个Android和java调用RESTful Web服务的利器Resting 当我们调用Web服务,往往是最终目标是取HTTP响应,将其转化为将在应用中呈现的值对象.Resting可以用来实现这一功能.Resting,在Java的一个轻量级的REST框架,可用于调用一个RESTful Web服务,并转换成响应来自客户端应用程序定制的Java对象.由于它的简单,resting是适合Android等手持设备. resting目标?暴露简单的get(),post(),put()和delete()

Android中如何调用拨打电话?

Android系统原本就为手机设计,所以,在android系统中的任何App中,只要愿意,拨打指定电话非常方便. 核心就是使用Intent跳转,指定请求Action为Intent.ACTION_CALL 即可. [源码下载] http://www.code4apk.com/android-code/178 核心代码如下: 1 Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:13888888888"); 下面一起来

android 的webview调用php服务器js , js 调用Android的webview

最近项目的需求: Android通过webView调用php的数据 , 这时候是需要整理webview和JavaScript之间相互调用的时候了 一. 理清思路: (1) . 双方都是客户端 , 一个是Android , 一个是js( js当然是客户端 , 后面说明) (2) . Android的webview需要支持JavaScript , 即 WebSettings settings = myWebView.getSettings(); settings.setJavaScriptEnabl