设计一个通用的BaseActivity
2016-06-12 13:32
239 查看
转载:http://www.jianshu.com/p/4d4b54c98f5d
如果是只有一个Activity的App就没有必要写BaseActivity,但一旦大于一个我还是建议写一个BaseActivity,准没错。
每个Activity通常都是绑定视图,绑定控件,监听控件,获取Bundle,跳转Activity还有一些很有些烦人的小功能如:Toast,findViewById,我们都可以封装一层简化他们的使用
可以看到还是很多重复代码的,所以说搞一个BaseActivity是多么有必要
其实不仅是Activity要搞一个基类,Fragment也要搞一个基类,这样可以大大减少重复代码,而且管理起来还比较容易,保持了样式的一致,如果想个性化也预留了相应的方法。
文/饥渴计科极客杰铿(简书作者)
原文链接:http://www.jianshu.com/p/4d4b54c98f5d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
如果是只有一个Activity的App就没有必要写BaseActivity,但一旦大于一个我还是建议写一个BaseActivity,准没错。
每个Activity通常都是绑定视图,绑定控件,监听控件,获取Bundle,跳转Activity还有一些很有些烦人的小功能如:Toast,findViewById,我们都可以封装一层简化他们的使用
BaseActivity的代码如下:
public abstract class BaseActivity extends Activity implements View.OnClickListener { /** 是否沉浸状态栏 **/ private boolean isSetStatusBar = true; /** 是否允许全屏 **/ private boolean mAllowFullScreen = true; /** 是否禁止旋转屏幕 **/ private boolean isAllowScreenRoate = false; /** 当前Activity渲染的视图View **/ private View mContextView = null; /** 日志输出标志 **/ protected final String TAG = this.getClass().getSimpleName(); /** View点击 **/ public abstract void widgetClick(View v); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "BaseActivity-->onCreate()"); Bundle bundle = getIntent().getExtras(); initParms(bundle); View mView = bindView(); if (null == mView) { mContextView = LayoutInflater.from(this) .inflate(bindLayout(), null); } else mContextView = mView; if (mAllowFullScreen) { requestWindowFeature(Window.FEATURE_NO_TITLE); } if (isSetStatusBar) { steepStatusBar(); } setContentView(mContextView); if (!isAllowScreenRoate) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } initView(mContextView); setListener(); doBusiness(this); } /** * [沉浸状态栏] */ private void steepStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 透明状态栏 getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 透明导航栏 getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } /** * [初始化参数] * * @param parms */ public abstract void initParms(Bundle parms); /** * [绑定视图] * * @return */ public abstract View bindView(); /** * [绑定布局] * * @return */ public abstract int bindLayout(); /** * [初始化控件] * * @param view */ public abstract void initView(final View view); /** * [绑定控件] * * @param resId * * @return */ protected <T extends View> T $(int resId) { return (T) super.findViewById(resId); } /** * [设置监听] */ public abstract void setListener(); @Override public void onClick(View v) { widgetClick(v); } /** * [业务操作] * * @param mContext */ public abstract void doBusiness(Context mContext); /** * [页面跳转] * * @param clz */ public void startActivity(Class<?> clz) { startActivity(new Intent(BaseActivity.this,clz)); } /** * [携带数据的页面跳转] * * @param clz * @param bundle */ public void startActivity(Class<?> clz, Bundle bundle) { Intent intent = new Intent(); intent.setClass(this, clz); if (bundle != null) { intent.putExtras(bundle); } startActivity(intent); } /** * [含有Bundle通过Class打开编辑界面] * * @param cls * @param bundle * @param requestCode */ public void startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) { Intent intent = new Intent(); intent.setClass(this, cls); if (bundle != null) { intent.putExtras(bundle); } startActivityForResult(intent, requestCode); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG, "onRestart()"); } @Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart()"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume()"); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause()"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy()"); } /** * [简化Toast] * @param msg */ protected void showToast(String msg){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); } /** * [是否允许全屏] * * @param allowFullScreen */ public void setAllowFullScreen(boolean allowFullScreen) { this.mAllowFullScreen = allowFullScreen; } /** * [是否设置沉浸状态栏] * * @param isSetStatusBar */ public void setSteepStatusBar(boolean isSetStatusBar) { this.isSetStatusBar = isSetStatusBar; } /** * [是否允许屏幕旋转] * * @param isAllowScreenRoate */ public void setScreenRoate(boolean isAllowScreenRoate) { this.isAllowScreenRoate = isAllowScreenRoate; } }
可以看到还是很多重复代码的,所以说搞一个BaseActivity是多么有必要
继承自BaseActivity的Activity使用如下:
public class MainActivity extends BaseActivity { private Button btn1; @Override public void widgetClick(View v) { switch (v.getId()){ case R.id.button: //用简化了的toast和startActivity showToast("toast"); startActivity(Main2Activity.class); break; } } @Override public void initParms(Bundle parms) { //解析bundle内容或者设置是否旋转,沉浸,全屏 } @Override public View bindView() { return null; } @Override public int bindLayout() { return R.layout.activity_main; } @Override public void initView(View view) { btn1=$(R.id.button); } @Override public void setListener() { btn1.setOnClickListener(this); } @Override public void doBusiness(Context mContext) { } }
其实不仅是Activity要搞一个基类,Fragment也要搞一个基类,这样可以大大减少重复代码,而且管理起来还比较容易,保持了样式的一致,如果想个性化也预留了相应的方法。
文/饥渴计科极客杰铿(简书作者)
原文链接:http://www.jianshu.com/p/4d4b54c98f5d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- Python 解析配置模块之ConfigParser详解
- 0-ajax操作json(番外篇)
- java 原型模式
- poj1655(树的重心)
- 【QT学习】解决对话框的中文字符串乱码
- 安卓学习
- GDAL 2.1.0工具开发之gdal_translate(图像裁剪、缩放、拉伸、赋坐标投影、格式转换等)
- Spring 中的SpEL
- Type Project has no default.properties file! Edit the project properties to set one.
- 阶乘求模
- struts2类型转换器日期转换小例详解
- JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
- 今日头条2017后端工程师笔试题
- Butterknife下的BaseAdapter封装。
- Unity学习日常问题记录八-反弹和静止条件值是可以设的,ParticleSystem的方向
- maven工程里面install时jdk报错
- For Me ...
- Ubuntu日记——adb无法启动的解决
- 几何画板中作函数图像的几种方法
- PL/SQL查询oracle数据库对象