Rex's BaseActivity

前言

写任何代码,当你想简化代码的时候,封装之后自己方便用的时候 便是你最有心得时候,用的时候更是愉悦,久而久之都有自己的一套快速开发,常见的有会封装 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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值