先说说为什么要构建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() {    }}

 

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Eclipse如何快速调试系统App(具有系统权限的Android(安卓)App)即Ec
  3. android仿iPhone滚轮控件实现及源码分析(一)
  4. Android(安卓)Activity的生命周期详细介绍
  5. Android横竖屏解析
  6. Android(安卓)Service服务
  7. Android中为什么主线程不会因为Looper.loop()方法造成阻塞
  8. Android(安卓)短信链接跳浏览器打开APP
  9. Android之自定义View的死亡三部曲之(Measure)

随机推荐

  1. android异步下载mp3文件
  2. cocos2d-x编译成android 以及android开发
  3. android 4.0横屏重复调用onCreate()函数
  4. 如何开发Android原生库并应用到Xamarin.A
  5. Android(安卓)Socket实例(2)
  6. Android性能:经典ListView适配器convertVi
  7. android:minSdkVersion 版本 标示
  8. Android--(1)--TextView的常用属性值
  9. Android Service完全解析
  10. Android中使用【microlog4】进行日志存储