设计一个通用的BaseActivity

举报
程思扬 发表于 2022/01/14 00:48:33 2022/01/14
【摘要】 如果是只有一个Activity的App就没有必要写BaseActivity,但一旦大于一个我还是建议写一个BaseActivity,准没错。 每个Activity通常都是绑定视图,绑定控件,监听控件,获取Bundle,跳转Activity还有一些很有些烦人的小功能如:Toast,findViewById,我们都可以封装一层简化他们的使...

如果是只有一个Activity的App就没有必要写BaseActivity,但一旦大于一个我还是建议写一个BaseActivity,准没错。

每个Activity通常都是绑定视图,绑定控件,监听控件,获取Bundle,跳转Activity还有一些很有些烦人的小功能如:Toast,findViewById,我们都可以封装一层简化他们的使用

BaseActivity的代码如下:


  
  1. public abstract class BaseActivity extends Activity implements View.OnClickListener { /** 是否沉浸状态栏 **/
  2. private boolean isSetStatusBar = true;
  3. /** 是否允许全屏 **/
  4. private boolean mAllowFullScreen = true;
  5. /** 是否禁止旋转屏幕 **/
  6. private boolean isAllowScreenRoate = false;
  7. /** 当前Activity渲染的视图View **/
  8. private View mContextView = null;
  9. /*
  10. * 日志输出标志
  11. **/
  12. protected final String TAG = this.getClass().getSimpleName();
  13. /*
  14. * View点击
  15. **/
  16. public abstract void widgetClick(View v);
  17. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
  18. Log.d(TAG, "BaseActivity-->onCreate()");
  19. Bundle bundle = getIntent().getExtras();
  20. initParms(bundle);
  21. View mView = bindView();
  22. if (null == mView) { mContextView = LayoutInflater.from(this) .inflate(bindLayout(), null);
  23. } else mContextView = mView;
  24. if (mAllowFullScreen) { requestWindowFeature(Window.FEATURE_NO_TITLE);
  25. } if (isSetStatusBar) { steepStatusBar(); } setContentView(mContextView);
  26. if (!isAllowScreenRoate) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  27. } initView(mContextView);
  28. setListener(); doBusiness(this);
  29. }
  30. /**
  31. * [沉浸状态栏]
  32. */
  33. private void steepStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 透明状态栏 getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  34. // 透明导航栏
  35. getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } /**
  36. * [初始化参数] *
  37. * @param parms
  38. */
  39. public abstract void initParms(Bundle parms);
  40. /**
  41. * [绑定视图] *
  42. * @return
  43. */
  44. public abstract View bindView(); /** * [绑定布局] * * @return */ public abstract int bindLayout();
  45. /**
  46. * [初始化控件] *
  47. * @param view
  48. */
  49. public abstract void initView(final View view);
  50. /**
  51. * [绑定控件] *
  52. * @param resId *
  53. * @return
  54. */
  55. protected <T extends View> T $(int resId) { return (T) super.findViewById(resId);
  56. }
  57. /**
  58. * [设置监听]
  59. */
  60. public abstract void setListener(); @Override public void onClick(View v) { widgetClick(v);
  61. }
  62. /**
  63. * [业务操作]
  64. *
  65. * @param mContext */
  66. public abstract void doBusiness(Context mContext);
  67. /**
  68. * [页面跳转]
  69. * * @param clz
  70. */
  71. public void startActivity(Class<?> clz) { startActivity(new Intent(BaseActivity.this,clz));
  72. }
  73. /**
  74. * [携带数据的页面跳转]
  75. * * @param clz * @param bundle
  76. */
  77. public void startActivity(Class<?> clz, Bundle bundle)
  78. { Intent intent = new Intent(); intent.setClass(this, clz);
  79. if (bundle != null) {
  80. intent.putExtras(bundle);
  81. } startActivity(intent);
  82. }
  83. /** * [含有Bundle通过Class打开编辑界面]
  84. * * @param cls
  85. * @param bundle
  86. * @param requestCode
  87. */
  88. public void startActivityForResult(Class<?> cls, Bundle bundle, int requestCode)
  89. { Intent intent = new Intent();
  90. intent.setClass(this, cls);
  91. if (bundle != null)
  92. { intent.putExtras(bundle);
  93. }
  94. startActivityForResult(intent, requestCode);
  95. }
  96. @Override
  97. protected void onRestart()
  98. { super.onRestart(); Log.d(TAG, "onRestart()");}
  99. @Override
  100. protected void onStart()
  101. { super.onStart(); Log.d(TAG, "onStart()"); }
  102. @Override
  103. protected void onResume()
  104. { super.onResume();
  105. Log.d(TAG, "onResume()");
  106. }
  107. @Override
  108. protected void onPause()
  109. { super.onPause(); Log.d(TAG, "onPause()"); } @Override
  110. protected void onStop()
  111. { super.onStop(); Log.d(TAG, "onStop()"); } @Override
  112. protected void onDestroy()
  113. {
  114. super.onDestroy();
  115. Log.d(TAG, "onDestroy()");
  116. }
  117. /**
  118. * [简化Toast]
  119. * @param msg
  120. */
  121. protected void showToast(String msg){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
  122. }
  123. /**
  124. * [是否允许屏幕旋转] *
  125. * @param isAllowScreenRoate
  126. */
  127. public void setScreenRoate(boolean isAllowScreenRoate)
  128. { this.isAllowScreenRoate = isAllowScreenRoate;
  129. } }
  130. /**
  131. * [是否允许全屏] *
  132. * @param allowFullScreen */
  133. public void setAllowFullScreen(boolean allowFullScreen)
  134. { this.mAllowFullScreen = allowFullScreen; }
  135. /**
  136. * [是否设置沉浸状态栏] *
  137. * @param isSetStatusBar
  138. */
  139. public void setSteepStatusBar(boolean isSetStatusBar)
  140. { this.isSetStatusBar = isSetStatusBar; }
  141. /**
  142. * [是否允许屏幕旋转] *
  143. * @param isAllowScreenRoate
  144. */
  145. public void setScreenRoate(boolean isAllowScreenRoate)
  146. { this.isAllowScreenRoate = isAllowScreenRoate;
  147. } }
  148. [是否设置沉浸状态栏]
  149. * * @param isSetStatusBar
  150. */ public void setSteepStatusBar(boolean isSetStatusBar)
  151. { this.isSetStatusBar = isSetStatusBar;
  152. }
  153. /**
  154. * [是否允许屏幕旋转]
  155. * *@param isAllowScreenRoate */
  156. public void setScreenRoate(boolean isAllowScreenRoate) {
  157. this.isAllowScreenRoate = isAllowScreenRoate; }
  158. }

继承自BaseActivity的Activity使用如下:



  
  1. public class MainActivity extends BaseActivity {
  2. private Button btn1;
  3. @Override public void widgetClick(View v) {
  4. switch (v.getId()){
  5. case R.id.button:
  6. //用简化了的toast和startActivity
  7. showToast("toast");
  8. startActivity(Main2Activity.class);
  9. break;}
  10. }
  11. @Override
  12. public void initParms(Bundle parms)
  13. { //解析bundle内容或者设置是否旋转,沉浸,全屏 }
  14. @Override public View bindView() { return null; } @Override public int bindLayout(){
  15. return R.layout.activity_main; }
  16. @Override
  17. public void initView(View view) {
  18. btn1=$(R.id.button);
  19. } @Override
  20. public void setListener() { btn1.setOnClickListener(this); }
  21. @Override
  22. public void doBusiness(Context mContext) { } }

可以看到还是很多重复代码的,所以说搞一个BaseActivity是多么有必要,而且Fragment也要搞一个基类,方法也类似,这样可以大大减少重复代码,而且管理起来还比较容易,保持了样式的一致,如果想个性化也预留了相应的方法。

文章来源: chengsy.blog.csdn.net,作者:程思扬,版权归原作者所有,如需转载,请联系作者。

原文链接:chengsy.blog.csdn.net/article/details/81567766

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。