时间:2021-05-19
下面会讨论哪些代码应该放在BaseActivity里面,哪些需要谨慎
下面我贴一份我自己封装的BaseActivity,在代码中和代码下面做了解释:
public abstract class BaseActivity extends AppCompatActivity { public Activity mActivity; private Unbinder mUnbinder; private static float sNoncompatDensity; private static float sNoncompatScaledDensity; private MaterialDialog mDialog; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); onAdjustLayout(); setContentView(setContentLayout()); //这里的是初始化绑定ButterKnife,在onDestory做了销毁 mUnbinder = ButterKnife.bind(this); this.mActivity = this; //统一将一个activity添加到一个集合里面 AppManager.getInstance().addActivity(mActivity); initToolBar(); initPresenter(); initData(savedInstanceState); Log.e("app", this.getClass().getSimpleName() + "------onCreate"); } @Override protected void onStart() { super.onStart(); Log.e("app", this.getClass().getSimpleName() + "------onStart"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.e("app", this.getClass().getSimpleName() + "------onRestoreInstanceState"); } @Override protected void onRestart() { super.onRestart(); Log.e("app", this.getClass().getSimpleName() + "------onRestart"); } @Override protected void onResume() { super.onResume(); Log.e("app", this.getClass().getSimpleName() + "------onResume"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.e("app", this.getClass().getSimpleName() + "------onSaveInstanceState"); } @Override protected void onPause() { super.onPause(); Log.e("app", this.getClass().getSimpleName() + "------onPause"); } @Override protected void onStop() { super.onStop(); Log.e("app", this.getClass().getSimpleName() + "------onStop"); } @Override protected void onDestroy() { super.onDestroy(); onDestroyActivity(); mUnbinder.unbind(); Log.e("app", this.getClass().getSimpleName() + "------onDestroy"); } /** * 显示一个Fragment */ public void showFragment(Fragment fragment) { if (fragment != null && fragment.isHidden()) { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.show(fragment); fragmentTransaction.commit(); } } /** * 隐藏一个Fragment */ public void hideFragment(Fragment fragment) { if (fragment != null && !fragment.isHidden()) { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.hide(fragment); fragmentTransaction.commit(); } } //这是一个设置toolbar标题栏的方法,ToolBarOptions类主要是持有一些id public void setToolBar(int toolBarId, ToolBarOptions options) { Toolbar toolbar = findViewById(toolBarId); if (options.titleId != 0) { toolbar.setTitle(options.titleId); } else { toolbar.setTitle(""); } if (!TextUtils.isEmpty(options.titleString)) { toolbar.setTitle(options.titleString); } if (options.backgroundColor != 0) { toolbar.setBackgroundResource(options.backgroundColor); } if (options.logoId != 0) { toolbar.setLogo(options.logoId); } setSupportActionBar(toolbar); if (options.isNeedNavigate) { toolbar.setNavigationIcon(options.navigateId); toolbar.setContentInsetStartWithNavigation(0); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!AppUtils.isNotFastClick()) { return; } onNavigateUpClicked(); } }); } } //子类直接调用展示toast public void showToast(String s) { ToastUtil.showToast(this, s); } //给子类提供一个获取activity对象的方式 public Activity getActivity() { return this; } //一个弹窗loading库 github地址: //implementation 'com.afollestad.material-dialogs:core:0.9.6.0' public void showLoading(String loadDesc) { mDialog = new MaterialDialog.Builder(this) .progress(true, -1) .content(loadDesc) .canceledOnTouchOutside(false) .cancelable(false) .show(); } public void showLoading(int resId) { mDialog = new MaterialDialog.Builder(this) .progress(true, -1) .content(getString(resId)) .canceledOnTouchOutside(false) .cancelable(false) .show(); } public void showLoading() { mDialog = new MaterialDialog.Builder(this) .progress(true, -1) .content("加载中...") .canceledOnTouchOutside(false) .cancelable(false) .show(); } public void hideLoading() { if (mDialog != null) { mDialog.dismiss(); } } //这里是退出app相关的逻辑,可以根据自己的退出做具体的处理 public void exitLogin() { SharedPreferenceUtils.getInstance(mActivity).put(Constant.KEY_LOGIN_TOKEN, ""); if (mDialog != null) { mDialog.hide(); mDialog = null; } mDialog = new MaterialDialog.Builder(this) .canceledOnTouchOutside(false) .title("提示") .content("账号已在其他地方登录,请退出重新登录!") .positiveText("确定") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { AppManager.getInstance().finishAllActivity(); Intent intent = new Intent(mActivity, LoginActivity.class); startActivity(intent); finish(); } }).show(); } private void onNavigateUpClicked() { onBackPressed(); } //开始contentLayout前调整布局(子类若有需要可以单独复写) public void onAdjustLayout() { } //下面这5个方法是子类必须实现的,分别是layout布局、toolbar、mvp的persenter初始化、 //onCreate内的initData、以及页面销毁的onDestroyActivity(可以根据自己的需要添加) public abstract int setContentLayout(); public abstract void initToolBar(); public abstract void initPresenter(); public abstract void initData(Bundle savedInstanceState); public abstract void onDestroyActivity();}不是很复杂,写的也比较详细,也基本适用于绝大部分的场景。可能还有其他需要注意的细节回头想起来再补上。
以上就是详解Android封装一个全局的BaseActivity的详细内容,更多关于Android封装BaseActivity的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
需求需要在整个app全局能够弹出弹框,接收到广播即进行处理。但是,BaseActivity派生出N个Activity,BaseActivity中的广播就会执行N
AndroidAsyncTask详解及使用方法简介:AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。AsyncTask,是android提供
rubyftp封装实例详解最近自己用ruby封装了一个Net::FTP的工具类.classFtpTooldefinitialize()@current_ftp=
java关键字static详解一、static代表着什么在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中
Android两个Fragment之间的跳转和数据的传递实例详解作为一个Android的菜鸟,前些天在做项目的时候用到了fragment,需求是从一个Fragm