如果是只有一个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也要搞一个基类,这样可以大大减少重复代码,而且管理起来还比较容易,保持了样式的一致,如果想个性化也预留了相应的方法。
相关推荐
一个好的BaseActivity设计可以帮助提升开发效率,降低维护成本,同时也能确保代码的规范性和一致性。因此,理解并熟练运用BaseActivity是Android开发者必备的技能之一。在实现BaseActivity时,应遵循“高内聚,低...
1. **定义基类**: 创建一个名为`BaseActivity`的类,让它继承自Android的`AppCompatActivity`或`Activity`。`AppCompatActivity`是Google推荐的用于支持Material Design的Activity基类。 ```java public class ...
在Android开发中,`BaseActivity`是一个常见的设计模式,它被用作所有其他活动(Activity)的基类,目的是为了代码复用和模块化。通过继承`BaseActivity`,开发者可以将通用的功能集中到一个地方,减少每个具体...
`BaseActivity`就是这样一个基础类,它通常包含一些通用的功能和布局,子类Activity可以继承它,从而避免代码重复。在这个场景下,我们将探讨如何自定义标题栏并在`BaseActivity`中加载布局。 首先,我们来创建`...
4. **Activity或Fragment的封装**:创建一个BaseActivity或BaseFragment,实现View接口,并持有Presenter的实例。在这个基类中,我们可以设置Presenter的生命周期管理,如在onCreate中初始化Presenter,在onDestroy...
在Android应用开发中,`BaseActivity`是一种常见的做法,它是一个基础活动类,通常用于封装共性的功能,以便在其他具体活动(子类)中复用。通过创建`BaseActivity`,开发者可以避免代码重复,提高代码的可维护性和...
BaseActivity是Activity的一个抽象基类,它的主要目的是封装一些通用的逻辑,比如初始化布局、处理权限、设置全局主题等。开发者可以在这个基类中添加公共的方法,然后在具体的Activity中继承它,减少代码重复。...
首先,创建一个名为BaseActivity的基类,该类继承自AppCompatActivity。AppCompatActivity是Android支持库中的一个关键组件,它提供了对Android 5.0(API级别21)及更高版本Material Design特性的兼容。在...
"Android-BaseFramework"就是这样一个专门针对BaseActivity和BaseFragment进行整合的库,旨在简化开发者的工作流程,提高开发效率。这个框架允许开发者直接从jCenter进行引用,意味着它已经被广泛测试并且与Android...
可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,...
在Android应用中,通常会有一个基类` BaseActivity`,用于复用通用功能,如权限管理、状态栏设置等。在此项目中,可以将网络请求的调用方法集成到`BaseActivity`,如`doNetworkRequest()`,并且提供统一的回调处理...
本教程将详细介绍如何通过简单的封装实现一个适用于各种场景的通用标题栏。参考链接:[Android 通用标题栏 简单封装实现](http://blog.csdn.net/RichieZhu/article/details/50935918)。 首先,我们需要了解Android...
本项目主要探讨了`Activity`的启动模式之一——`singleInstance`,以及如何通过一个`BaseActivity`来规范和管理所有的`Activity`,具体的技术亮点包括`BaseActivity`的设计与实现,以及使用`ActivityCollector`进行`...
【标题】"安卓Android商品购物系统app设计源码"揭示了本项目的核心是关于构建一个Android平台上的在线购物应用程序。这个应用可能包含了完整的用户界面、后台数据管理、购物车功能、支付接口集成以及订单处理等一...
为了减少重复代码,开发者通常会创建一个`BaseActivity`,将这些通用功能集中在此类中,然后让其他Activity继承自`BaseActivity`,从而实现代码复用。 3. **Retrofit**:Retrofit是一个强大的HTTP客户端库,它允许...
此外,`yangsongsong-BaseUtils-d67f094`这个文件名可能指向一个名为BaseUtils的库或模块,其中包含了各种通用的工具方法。这类工具类通常包含如字符串处理、日期时间操作、网络请求封装等功能,进一步提高了代码的...
综上所述,一个简单的Android项目基本配置包括对`BaseActivity`和`BaseDialog`的基类设计,全局的Activity动画设定,以及自定义`TitleBar`以提升用户体验。通过合理地使用这些技术,开发者可以构建出结构清晰、易于...
在Android应用开发中,`BaseActivity`是一种常见的设计模式,它是所有其他Activity的基类,用于实现一些通用功能,以减少代码重复并提高代码复用性。本篇将深入探讨`BaseActivity`的设计原理和常见实践,以及如何...
在Android应用开发中,`BaseToolbarActivity`是一个常见的设计模式,用于封装通用的工具栏(Toolbar)操作,以便在多个Activity之间复用。这个压缩包`BaseToolbarActivity.zip`包含了一个基本的实现,具备了Toolbar...
接下来是`Fragment`,它是安卓UI设计的一个重要部分。它代表屏幕上的一个可重用部分,可以在不同的`Activity`之间移动和替换,使得UI可以根据设备的屏幕大小和方向进行动态调整。在Tab切换场景下,`Fragment`特别...