Android Activity基类的抽取BaseActivit

2017-12-19  本文已影响485人  Sky_Blue

一、为什么要抽取BaseActivity

Android实际开发中,一般情况下Activity使用得较多,也不排除一些用Fragment为主搭建的框架,但一般情况都是使用Activity。
Activity的加载大概就分为那个几个步骤:
  一:获取上个页面带过来的数据,或者初始化一些备用的数据
  二:加载布局
  三:初始化标题栏,初始化View
  四:访问网络加载数据
抽取统一的BaseActivity:
  第一可以规定代码的编写规范。
  第二多人开发维护变得简单。
  第三在BaseActivity里面可以做一些通用的操作等等。

二、由于代码BaseActivity较为简单,直接上代码

/**
 * Activity的Base类
 */
public abstract class BaseActivity extends AppCompatActivity {
    protected View mContentView;
    private Unbinder mBinder;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 1. 初始化上个页面带过来的数据
        initData();
        // 2. 调用setContentView加载布局
        mContentView = convertView();
        if (mContentView == null) {
            throw new ClassCastException("setLayout 只能是View 或者布局ID");
        }
        setContentView(mContentView);
        // 3.做一些通用的操作,用注解绑定View
        mBinder = ButterKnife.bind(this);
        // 4. 绑定头部
        initTitle();
        // 5.做一些View初化操作
        initView(savedInstanceState);
        // 6.网络的一些处理
        initNet();
    }

    /**
     * 对View进行处理
     */
    private View convertView() {
        View contentView = null;
        if (getLayout() instanceof Integer) {
            Integer layoutId = (Integer) getLayout();
            contentView = getLayoutInflater().inflate(layoutId, null, false);
        }
        if (getLayout() instanceof View) {
            contentView = (View) getLayout();
        }
        return contentView;
    }

    /**
     * 页面的布局ID 或者View
     */
    protected abstract Object getLayout();

    @Override
    protected void onDestroy() {
        if (mBinder != null) {
            mBinder.unbind();
            mBinder = null;
        }
        mContentView = null;
        super.onDestroy();
    }

    /**
     * 2. 初始化头
     */
    protected void initTitle() {
    }

    /**
     * 1.获取上个页面传递过来的数据
     */
    protected void initData() {
    }


    /**
     * 3. 初始化View
     */
    protected abstract void initView(Bundle savedInstanceState);


    /**
     * 4.初始化网络
     */
    protected void initNet() {

    }

    /**
     * 打开Activity
     */
    protected void startActivity(Class<?> clazz) {
        startActivity(clazz, null);
    }

    /**
     * 打开Activity
     */
    protected void startActivity(Class<?> clazz, Bundle bundle) {
        Intent intent = new Intent(this, clazz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * 获取当前的Activity
     */
    protected Activity getAppActivity() {
        return this;
    }
}

了解更多实际开发的基类抽取,请看:
Android Activity基类的抽取AppActivity(二)
源码地址:https://gitee.com/lfwen/TitleDemo

上一篇 下一篇

猜你喜欢

热点阅读