前言

写任何代码,当你想简化代码的时候,封装之后自己方便用的时候 便是你最有心得时候,用的时候更是愉悦,久而久之都有自己的一套快速开发,常见的有会封装 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() {@Overridepublic 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);}@Overrideprotected 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() {@Overridepublic void ok() {//实行需要高权限的方法}@Overridepublic void denied() {ToastSHORT("该功能需要XX权限已被拒绝,需在设置重新开启!");}@Overridepublic 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();}}}@Overridepublic 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;}

更新中

Rex's BaseActivity相关推荐

  1. 064_photoshow

    title 064<浮图秀>优雅查看B站视频封面 浮图秀(PhotoShow)是一款看大图工具, 只需将鼠标放到图片上方,即可查看到图片的最大尺寸 以Bilibili主页视频封面为例 浮图 ...

  2. 2.抽取代码(BaseActivity)

    知识点 俩种退出程序的方法 复制集合 同步的用法 字符数组 工厂模式,生产fatgment,解决了碎片重复创建的问题 全局上下文 actionbar用法 fargmentadapter,当viewpa ...

  3. 分享EOS加拿大的文章《REX——从源代码做技术解析》

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 已提议将丢失密钥恢复系统部署到EOS主网. 丢失密钥解决方案的最后一步已经在链上提出.最后一步是将丢失密钥解决方案智能合 ...

  4. android布局共享,布局共享(如所有ACTIVITY拥有相同的布局部分,比如ACTIONBAR,在BASEACTIVITY中写入布局)...

    有时候界面上会用到统一的布局,比如toolbar,你可能会想到在用到的地方都去加上toobar这样对于程序的开发与维护来说都显得特别麻烦,我们可以将他写在父类中. 首先创建一个BaseActivity ...

  5. BaseActivity的抽取

    Activity有些公共部分,比如setContentView.Activity管理.初始化操作.联网操作.Activity跳转.关闭当前Activity.保存用户登录信息.读取用户登录信息等. 我们 ...

  6. android应用框架搭建之BaseActivity

    网上有很多介绍BaseActivity的博文,多数是从应用的角度去描述的. 这里,我所介绍的BaseActivity不同,主要从框架搭建的角度去介绍BaseActivity的使用. 先看代码: ? 1 ...

  7. android 程序类图,Android模板设计模式之 - 构建整个应用的BaseActivity

    1. 模式介绍 模式的定义 定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式的使用场景 多个子类有公有的方法,并且逻辑基本相 ...

  8. android baseactivity,Android应用开发Android通过BaseActivity获取到当前启动的Activity名称...

    本文将带你了解Android应用开发Android通过BaseActivity获取到当前启动的Activity名称,希望本文对大家学Android有所帮助. < 在BaseActivity的on ...

  9. BaseActivity与BaseFragment的封装

    这篇博客主要是从BaseActivity与BaseFragment的封装开始,总结我们在实战开发中关于Fragment的注意事项以及心得体会. 先看以下效果图: 这里模拟的是用户登录模块,你可能会说, ...

最新文章

  1. 高并发环境下如何优化Tomcat性能?看完我懂了!
  2. 数据库 ' 库名' 已打开,并且一次只能有一个用户访问。 (Microsoft SQL Server,错误: 924)
  3. 新鲜出炉!年度10篇新颖到出格的 AI 论文(附链接)
  4. 图解数据库辅助软件教程
  5. android内存优化方法,Android开发内存优化注意事项和方法
  6. DataGridView编辑后立即更新到数据库的两种方法
  7. 几个 ASP.NET 小技巧
  8. leetcode 662. Maximum Width of Binary Tree | 662. 二叉树最大宽度(BFS)
  9. 从JDBC ResultSet创建对象流
  10. 一个女程序员的创业人生:胆识也是一种能力 作者:秋镇菜
  11. python求散点曲线下方面积
  12. 力扣225-用队列实现栈(C++,附思路及优化思路,代码)
  13. vue中v-show v-if v-bind的使用
  14. 为什么都建议学java而不是python-为什么都建议学Java而不是Python?两者有什么区别吗?...
  15. 计算机网络网线颜色,网络线接法-各种网线的分类和区别-电气资讯 - 电工屋
  16. FAT32 R0.12b f_mkfs应用实例
  17. 如何低成本,快速构建企业 Wiki 和团队知识分享平台
  18. web学习(3)--别踩白块儿(HTML版)(web入门)
  19. Raspberry-Pi-PICO系列--第七篇 创建自己的工程
  20. 淘宝粉丝能买吗?怎么加最快

热门文章

  1. python飞机大战简书_飞机大战(pygame)开发实录一
  2. 运营商认可5G厘米波技术,美国主推的5G毫米波技术被边缘化
  3. MAYA灯光 物理天光
  4. 时间复杂度计算方法以及常见的时间复杂度
  5. 数学分析_多元函数积分——曲线积分、曲面积分总结
  6. cocos2dx——戏如人生
  7. java解压zip与rar
  8. GPSR: Greedy Perimeter Stateless Routing for Wireless Networks-泛读概要
  9. 【FFMPEG】AVERROR(EAGAIN)含义
  10. keil5中while(1)中while(i--)无限循环