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; }
更新中
- Rex's BaseActivity
- Rex Swain's REXX Summary
- REX。。。。。
- Rex
- baseActivity
- BaseActivity
- BaseActivity
- BaseActivity
- BaseActivity
- BaseActivity
- BaseActivity
- BaseActivity
- BaseActivity
- Rex 操作系统
- Rex 操作系统
- rex 传参
- Rex.pm
- rex RexCommandsFile:
- mysql配置详解
- 非root搭建lamp & 安装wordpress
- kill 信号
- 第八届河南省赛题最小换乘_NYOJ1238
- Linux下CPU负载
- Rex's BaseActivity
- 哈夫曼树
- ACM刷题之ZOJ————How Many Nines
- top 命令详解
- HTTP Cache
- android的MediaPlayer架构介绍
- Kill -HUP详解
- Apache的工作模式prefork & worker简单分析
- 数学之线性代数——正交分解