BaseActivity的封装
2018-03-22 17:28
183 查看
(一)BaseActivity类
public abstract class BaseActivity extends AppCompatActivity implements NetListenerReceiver.NetEvent {
private Unbinder mBind;//ButterKnife框架
protected CheckPermission mCheckPermission;//适配Android6.0检查权限类
protected CacheDataSqlite mCacheDataSqlite;//缓存数据的数据库
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int contentViewId;
boolean cacheData, usePermission;
if (getClass().isAnnotationPresent(ConfigView.class)) { //通过自定义注解获取子类的配置信息
ConfigView annotation = getClass().getAnnotation(ConfigView.class);
contentViewId = annotation.contentViewId();
cacheData = annotation.cacheData();
usePermission = annotation.usePermission();
} else {
throw new RuntimeException("Class must add annotations of ConfigView.class");
}
setContentView(contentViewId);
mBind = ButterKnife.bind(this); //使用ButterKnife框架
Constants.mNetEvent = this;
if (cacheData){ //是否使用数据库缓存
mCacheDataSqlite = new CacheDataSqlite(this);
}
if (usePermission) { //是否使用适配Android权限
mCheckPermission = new CheckPermission(this);
}
initView(savedInstanceState);
}
/**
* 初始化视图
* @param savedInstanceState
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 监听网络是否改变的状态
* @param netWork
*/
@Override
public void onNetChange(boolean netWork) {
}
//获取控件文本
public String getText(TextView textView){
return textView.getText().toString().trim();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (mCheckPermission != null) {
mCheckPermission.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onDestroy() {
mBind.unbind();
if (mCacheDataSqlite!=null){
mCacheDataSqlite.closeDB();
}
super.onDestroy();
}
}(二)ConfigView注解配置类
/**
* Created by 刘强lq
* <p>
* 对View配置的注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ConfigView {
/**
* 引入的布局的id
*
* @return
*/
int contentViewId() default -1;
/**
* 是否做缓存数据操作 默认不使用
*
* @return
*/
boolean cacheData() default false;
/**
* 是否使用权限 默认不使用
*
* @return
*/
boolean usePermission() default false;
}
(三)实例TestActivity
//配置activity关联的视图以及此activity是否使用适配Android6.0的权限
@ConfigView(contentViewId = R.layout.activity_main,usePermission = true)
public class TestActivity extends BaseActivity {
private static final int CAMERA_CODE = 0x01; //照相的权限(随意写)
@Override
protected void initView(Bundle savedInstanceState) {
userCamera(); //假如用户使用拍照
}
private void userCamera() {
//申请权限 做操作
mCheckPermission.checkPermission(CAMERA_CODE, new CheckPermission.PListener() {
@Override
public void onHavaPermission(boolean havaPermission) {
if (havaPermission){
//用户授权了拍照权限....
}else {
//用户没有授权
}
}
}, Manifest.permission.CAMERA);
}
}
public abstract class BaseActivity extends AppCompatActivity implements NetListenerReceiver.NetEvent {
private Unbinder mBind;//ButterKnife框架
protected CheckPermission mCheckPermission;//适配Android6.0检查权限类
protected CacheDataSqlite mCacheDataSqlite;//缓存数据的数据库
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int contentViewId;
boolean cacheData, usePermission;
if (getClass().isAnnotationPresent(ConfigView.class)) { //通过自定义注解获取子类的配置信息
ConfigView annotation = getClass().getAnnotation(ConfigView.class);
contentViewId = annotation.contentViewId();
cacheData = annotation.cacheData();
usePermission = annotation.usePermission();
} else {
throw new RuntimeException("Class must add annotations of ConfigView.class");
}
setContentView(contentViewId);
mBind = ButterKnife.bind(this); //使用ButterKnife框架
Constants.mNetEvent = this;
if (cacheData){ //是否使用数据库缓存
mCacheDataSqlite = new CacheDataSqlite(this);
}
if (usePermission) { //是否使用适配Android权限
mCheckPermission = new CheckPermission(this);
}
initView(savedInstanceState);
}
/**
* 初始化视图
* @param savedInstanceState
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 监听网络是否改变的状态
* @param netWork
*/
@Override
public void onNetChange(boolean netWork) {
}
//获取控件文本
public String getText(TextView textView){
return textView.getText().toString().trim();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (mCheckPermission != null) {
mCheckPermission.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onDestroy() {
mBind.unbind();
if (mCacheDataSqlite!=null){
mCacheDataSqlite.closeDB();
}
super.onDestroy();
}
}(二)ConfigView注解配置类
/**
* Created by 刘强lq
* <p>
* 对View配置的注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ConfigView {
/**
* 引入的布局的id
*
* @return
*/
int contentViewId() default -1;
/**
* 是否做缓存数据操作 默认不使用
*
* @return
*/
boolean cacheData() default false;
/**
* 是否使用权限 默认不使用
*
* @return
*/
boolean usePermission() default false;
}
(三)实例TestActivity
//配置activity关联的视图以及此activity是否使用适配Android6.0的权限
@ConfigView(contentViewId = R.layout.activity_main,usePermission = true)
public class TestActivity extends BaseActivity {
private static final int CAMERA_CODE = 0x01; //照相的权限(随意写)
@Override
protected void initView(Bundle savedInstanceState) {
userCamera(); //假如用户使用拍照
}
private void userCamera() {
//申请权限 做操作
mCheckPermission.checkPermission(CAMERA_CODE, new CheckPermission.PListener() {
@Override
public void onHavaPermission(boolean havaPermission) {
if (havaPermission){
//用户授权了拍照权限....
}else {
//用户没有授权
}
}
}, Manifest.permission.CAMERA);
}
}
相关文章推荐
- BaseActivity和BaseFragment 的封装
- ConnectivityManager类网络状态判断设置+BaseActivity和BaseFragment的封装使用+网络状态工具类+网络请求工具类
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈起
- BaseActivity与BaseFragment的简单封装
- 从BaseActivity与BaseFragment的封装谈起
- Android谈谈封装那些事--BaseActivity和BaseFragment(二)
- 从BaseActivity与BaseFragment的封装谈起 不错的文章
- 动态权限申请封装在BaseActivity中
- BaseActivity中封装通用的Toolbar
- BaseActivity基类封装
- Android BaseActivity、BaseFragment等 常用方法封装
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈
- BaseActivity的封装思想及YzsBaseActivity详解
- MVP模式及BaseActivity的简单封装
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈起
- BaseActivity中标题栏TitleBar的封装
- Android 6.0运行时权限 baseactivity简单封装