Rex's BaseActivity

来源:互联网 发布:途观丝绸之路 知乎 编辑:程序博客网 时间:2024/06/05 01:05

前言

写任何代码,当你想简化代码的时候,封装之后自己方便用的时候 便是你最有心得时候,用的时候更是愉悦,久而久之都有自己的一套快速开发,常见的有会封装 application,activity 亦或是万能的adapter 。泛型,不定长数组,接口,等等都是很好的方法,注解,现在便以activity 总结一些个人的base系列,或者大家可以留言 想封装任何自己觉得很重复的代码。
为什么想出这个呢,只鉴于我的同事,宁愿复制几十遍相同代码 说这样快,也不愿意封装一下下。现在提供自己封装的一些很基础常用的小玩意儿

所以以下代码都是封装在BaseActivity中,使用场景都是extends BaseActivity

封装内容

1. startActivityForResult +onActivityResult

2. 精准位置 log and toast

3. Build.VERSION_CODES.M 动态权限申请

4. 更新中

* 略简化findViewById (Butterknife使用者可以无视此行 哈哈~~~~)

1.startActivityForResult +onActivityResult

一般开启一个activity呢,回来想来传值或者即时回调呢 需要实现这个两个方法 甚至还有一个定义final的int,作为接头暗号,十分麻烦,尤其是这两个方法使用的地方距离较远 onActivityResult 一般在偏底部的位置。而startActivityForResult 可能哪里都会在,代码多的时候查看很跳跃,不方便,但两者的逻辑确实的关联在一起写的。
假设我们不需要传什么code。能够写出类似Onclick回调多好

使用效果,(虽然本身是不需要传code的)

    startActivityWithCallback(new Intent(MainActivity.this, Activity2.class), new ResultActivityAdaptor.ResultActivityListener() {            @Override            public void onResult(int requestCode, int resultCode, Intent intent) {            }        });

实现代码
1.public abstract class BaseActivity extends Activity

public void startActivityWithCallback(Intent intent, ResultActivityAdaptor.ResultActivityListener listener) {        mResultActivityAdaptor.startActivityForResult(intent, listener);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        mResultActivityAdaptor.onResult(requestCode, resultCode, data);    }

2.ResultActivityAdaptor

package baseframe.rex.com.utils.base;import android.app.Activity;import android.content.Intent;import android.util.SparseArray;/** * Created by  Rex on 2017/4/10. */public class ResultActivityAdaptor {    private static final int REQUEST_CODE_START = 20000;    private SparseArray requests = new SparseArray();    private Activity mActivity;    private int currentReqCode = 20000;    public ResultActivityAdaptor(Activity activity) {        this.mActivity = activity;    }    public void startActivityForResult(Intent i, ResultActivityListener listener) {        ++this.currentReqCode;        this.requests.put(this.currentReqCode, listener);        this.mActivity.startActivityForResult(i, this.currentReqCode);    }    public boolean onResult(int requestCode, int resultCode, Intent data) {        ResultActivityListener listener = (ResultActivityListener)this.requests.get(requestCode);        if(listener != null) {            listener.onResult(requestCode, resultCode, data);            this.requests.remove(requestCode);            return true;        } else {            return false;        }    }    public interface ResultActivityListener {        void onResult(int requestCode, int resultCode, Intent intent);    }}

log and toast

public abstract class BaseActivity extends Activity

 public static final String LOG_TAG = "rex";  //输出的简化//精准到 类 方法名 行 log输出    public static String buildHeader() {        StackTraceElement stack = Thread.currentThread().getStackTrace()[4];        return String.format("%s->%s->%d", new Object[]{stack.getClassName(), stack.getMethodName(), Integer.valueOf(stack.getLineNumber())}) + ":<--->:";    }    public void ToastSHORT(String msg) {        Toast.makeText(BaseActivity.this, msg, Toast.LENGTH_SHORT);    }    public void ToastLONG(String msg) {        Toast.makeText(BaseActivity.this, msg, Toast.LENGTH_LONG);    }    public void LogI(String msg) {        Log.i(LOG_TAG, buildHeader() +""+ msg);    }

动态权限申请

使用效果
extends BaseActivity

//如果谁能做到不用手动指定Manifest.permission.WRITE_EXTERNAL_STORAGE//通过系统自动拒绝自动获取再去申请请告诉我  CheckPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, new BaseActivity.CheckPermissionOk() {            @Override            public void ok() {                //实行需要高权限的方法            }            @Override            public void denied() {                ToastSHORT("该功能需要XX权限已被拒绝,需在设置重新开启!");            }            @Override            public void nok() {                ToastSHORT("已成功禁止,相关功能将不可用!");            }        });

实现代码
BaseActivity extends Activity

private final int REQUEST_CODE = 0x123;    public interface CheckPermissionOk {        void ok();        void denied();        void nok();    }    private CheckPermissionOk okImpls;    public void CheckPermission(String permission, CheckPermissionOk okImpl) {        okImpls = okImpl;        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            //无需要检查权限            if (okImpls != null) {                okImpls.ok();            }            return;        }        //检查权限        if (ContextCompat.checkSelfPermission(this, permission)                != PackageManager.PERMISSION_GRANTED) {            //进入到这里代表没有权限.            if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {                //已经禁止提示了                if (okImpls != null) {                    okImpls.denied();                }            } else {                ActivityCompat.requestPermissions(this, new String[]{permission}, REQUEST_CODE);            }        } else {            //有权限            if (okImpls != null) {                okImpls.ok();            }        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        switch (requestCode) {            case REQUEST_CODE:                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                    //用户同意授权                    if (okImpls != null) {                        okImpls.ok();                    }                } else {                    //用户拒绝授权                    okImpls.nok();                }                break;        }    }

findViewById

这个东西在 Butterknife之后就太小儿科了….233

public abstract class BaseActivity extends Activity

 //fid的简化    public <T extends View> T Fid(int id) {        T tView = (T) findViewById(id);        return tView;    }    /**     * like Cid(textView1,R.id.tv1).Cid(textView2,R.id.tv2)     * @param tVIew     * @param id     * @param <T>     * @return     */    public <T extends View> BaseActivity Cid(T tVIew, int id) {        tVIew = Fid(id);        return this;    }

更新中

2 0
原创粉丝点击