zoukankan      html  css  js  c++  java
  • 简化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

  • 相关阅读:
    angularJS之路由
    angularJS之ng-repeat
    智能算法之Matlab实现(1)——遗传算法(1)
    如何快速处理线上故障
    测试计划怎么写
    接口测试基础
    HTTP 的一些问题
    DevOps简介
    什么是DevOps?
    HTTPS 如何保证数据传输的安全性
  • 原文地址:https://www.cnblogs.com/jiezzy/p/3698090.html
Copyright © 2011-2022 走看看