Android构建BaseActivity和BaseFragment
16lz
2021-01-25
先说说为什么要构建Base类吧,我们一般在创建一个Activity的时候往往会去继承AppCompatActivity然后重写oncreate()方法以及生命周期,有几个Activity就会执行这样的操作几次,麻烦,代码量也多,我们构建一个Base类,让我们的Activity去继承这个base类,所有的生命周期都在Base里面操作,共通逻辑写一遍被继承就可以实现,且可以重写父类方法。但是也有一定缺点,比如产品提出了一个复杂的功能或者使用了一些第三方库,那么base可能就没有用,必须重写所有需要的业务方法,所以什么时候使用Base类是你需要去选择的。下面就先给大家讲一下我自己构建的BaseActivity:
BaseActivity
先贴代码:
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (createLayout() != 0) //如果传过来的布局文件ID不为0,那么加载布局文件 setContentView(createLayout()); } @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); initViews(); initData(); } /** * @return 用来加载布局文件 */ protected abstract int createLayout(); /** * 初始化视图 */ public void initViews() { } /** * 初始化数据 */ public void initData() { } /** * @param cls * @param bundle 界面跳转 */ public void startActivity(Class cls, Bundle bundle) { Intent intent = new Intent(this, cls); if (bundle != null) { intent.putExtras(bundle); } startActivity(intent); } /** * @param cls 界面跳转,不需要Bundle传值 */ public void startActivity(Class cls) { startActivity(cls, null); } /** * @param cls * @param bundle * @param code 界面跳转,带请求码 */ public void startActivityForResult(Class cls, Bundle bundle, int code) { Intent intent = new Intent(this, cls); if (bundle != null) { intent.putExtras(bundle); } startActivityForResult(intent, code); }}
我们来继承这个BaseActivity:
public class MyActivity extends BaseActivity { @Override protected int createLayout() { return R.layout.activity_a; } @Override public void initViews() { super.initViews(); } @Override public void initData() { super.initData(); }}
代码比之前直接继承AppCompatActivity要简洁的多,我们Base里面封装了一下跳转,还可以在里面封装更多的方法,比如,showTaost,进度条,等待加载等等,BaseFragment也与BaseActivity差不多,这里我就只贴代码出来:
public abstract class BaseFragment extends Fragment { public Context getContext() { return getActivity(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(createLayout(), container, false); } protected abstract int createLayout(); @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initViews(); initData(); } public void startActivity(Class cls) { startActivity(cls, null); } public void startActivity(Class cls, Bundle bundle) { Intent intent = new Intent(getContext(), cls); if (bundle != null) { intent.putExtras(bundle); } startActivity(intent); } public void startActivityForResult(Class cls, Bundle bundle, int code) { Intent intent = new Intent(getContext(), cls); if (bundle != null) { intent.putExtras(bundle); } startActivityForResult(intent, code); } public void initViews() { } public void initData() { }}
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Eclipse如何快速调试系统App(具有系统权限的Android(安卓)App)即Ec
- android仿iPhone滚轮控件实现及源码分析(一)
- Android(安卓)Activity的生命周期详细介绍
- Android横竖屏解析
- Android(安卓)Service服务
- Android中为什么主线程不会因为Looper.loop()方法造成阻塞
- Android(安卓)短信链接跳浏览器打开APP
- Android之自定义View的死亡三部曲之(Measure)