封装一个BaseActivity

开发中有时候会需要采用的base类。有时候会产生各种冗余的方法。这是我个人开发的时候采用的baseactivity框架,对公共的方法进行了封装。
包括activity的双击退出,沉浸式,网络判断(转),对activity跳转方法的封装,以及对eventbus这些常用的第三方框架进行一系列的封装

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //获取全局的对象
        //获取activitymanager管理器,进行统一管理

        setContentView(BindLayout());

        //绑定黄油刀
        // 是否设置沉浸式状态栏
        if (isNeedTranslucentStatus()) {

            setTranslucentStatus();

        } else {
            if (toolbar != null) {
                toolbar.setPadding(0, 0, 0, 0);
            }

        }

        //初始化布局
        initView();

        //初始化数据
        initData();

        //初始化注册
        initRegister();

        Intent intent = new Intent();
        // 进入页面之后的判断网络情况
        intent.setAction(BaseConstant.ACTION_ONE_SEND);
        sendBroadcast(intent);
    }

    private void initRegister() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(BaseConstant.ACTION_ONE_SEND);
        registerReceiver(mNetBroadcastReceiver, filter);
        mNetBroadcastReceiver.setOnNetWorkStateEvent(this);
    }

    public Toolbar getToolbar() {
        return toolbar;
    }

    public void setToolbar(Toolbar toolbar) {
        this.toolbar = toolbar;
        setSupportActionBar(toolbar);
    }

    /**
     * 设置toolbar的标题
     *
     * @param title
     */
    public void setToolbarTitle(String title) {
        if (mActionBar == null) {
            mActionBar = getSupportActionBar();
        }
        mActionBar.setTitle(title);
    }

    /**
     * [绑定控件]
     *
     * @param resId
     * @return
     */
    protected <T extends View> T $(@IdRes int resId) {
        return (T) super.findViewById(resId);
    }


    /**
     * 设置是否需要沉浸式
     *
     * @return
     */
    public boolean isNeedTranslucentStatus() {
        return false;
    }

    /**
     * 设置沉浸式
     */
    private void setTranslucentStatus() {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        // 这个属性4.4算是全透明(有的机子是过渡形式的透明),5.0就是半透明了 我的模拟器、真机都是半透明,

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// 4.4 全透明状态栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// 5.0 全透明实现
            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);// calculateStatusColor(Color.WHITE, (int) alphaValue)

        }

    }

    /**
     * 双击退出
     */
    @Override
    public void onBackPressed() {
        if (isDoubleExit()) {
            if (System.currentTimeMillis() - mTimeMillis > 2000) {
                ToastUtil.ToastShow("在按一次退出");
                mTimeMillis = System.currentTimeMillis();
            } else {
                finish();
            }
        } else {
            finish();
        }
    }

    /**
     * 并且释放资源
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mNetBroadcastReceiver);

    }

    /**
     * 获取控件id,类似于findviewbyid
     *
     * @param id 传入一个控件的id,自动寻找
     * @return 返回一个控件
     */
    protected View getViewId(int id) {
        View view = mSparseArray.get(id);
        if (view == null) {
            view = this.findViewById(id);
            mSparseArray.put(id, view);
        }
        return view;
    }


    /*
     * 绑定一个布局id
     */
    @LayoutRes
    protected abstract int BindLayout();

    /**
     * 查找id,或者初始化toolbar的标题
     */
    protected abstract void initView();

    /**
     * 初始化数据
     */
    protected abstract void initData();

    /**
     * [页面跳转] *
     */
    public void startActivity(Class<? extends Activity> clz) {
        startActivity(new Intent(SuperBaseActivity.this, clz));
    }

    /**
     * [携带数据的页面跳转] *
     */
    public void startActivity(Class<? extends Activity> clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }


    /**
     * [含有Bundle通过Class打开编辑界面] *
     */
    public void startActivityForResult(Class<? extends Activity> cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                break;
        }
        return true;
    }

    public boolean isDoubleExit() {
        return false;
    }

    /**
     * 权限处理,写了一个权限的工具类
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        PermissionRequesUtls.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms, boolean isAllGranted) {
        LogUtil.e("同意:" + perms.size() + "个权限,isAllGranted=" + isAllGranted);
        for (String perm : perms) {
            LogUtil.e("同意:" + perm);
        }
    }

    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms, boolean isAllDenied) {
        LogUtil.e("拒绝:" + perms.size() + "个权限,isAllDenied=" + isAllDenied);
        for (String perm : perms) {
            LogUtil.e("拒绝:" + perm);
        }
    }

    /**
     * eventbus处理
     */
    @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    // 解除evenbus绑定
    @Override
    protected void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(Object event) {
        onMessageEvent(event);
    }
    
// 子类可以重写这个方法,达到收取消息的目的
    protected void onMessageEvent(Object event) {

    }

    protected void showShortToast(String s) {
        ToastUtil.ToastShow(s);
    }


    protected void showLongToast(String s) {
        ToastUtil.ToastLongTimeShow(s);
    }

而对网络的封装,我单独此办公上面的代码文件里面拿了出来,因为其中涉及到一个NetworkStateView,关于这个我会单独再开一章进行单独解析

    /**
     * @param netWorkState 状态值
     */
    @Override
    public void onNetStateEvent(int netWorkState) {
        switch (netWorkState) {
            case NetUtils.NETWORK_NONE:
                onNetWorkNone();
                break;
            case NetUtils.NETWORK_NONET:
                onNetWorkNoNet();
                break;
            case NetUtils.NETWORK_MOBILE:
                onNetWorkMobile();
                break;
            case NetUtils.NETWORK_WIFI:
                onNetWorkWifi();
                break;
            case NetUtils.NETWORK_EMPTY:
                onNetWorkEmpty();
                break;
            default:
                break;
        }
    }

    public void onNetWorkNoNet() {
        LogUtil.i("onNetWorkNoNet");
        if (mNetworkStateView != null) {
            mNetworkStateView.showNoNet();
        }
    }

    public void onNetWorkWifi() {
        LogUtil.i("onNetWorkWifi");
        if (mNetworkStateView != null) {
            mNetworkStateView.showSuccess();
        }
    }

    public void onNetWorkMobile() {
        LogUtil.i("onNetWorkMobile");
        if (mNetworkStateView != null) {
            mNetworkStateView.showSuccess();
        }
    }

    public void onNetWorkEmpty() {
        LogUtil.i("onNetWorkEmpty");
        if (mNetworkStateView != null) {
            mNetworkStateView.showEmpty();
        }
    }

    public void onNetWorkNone() {
        LogUtil.i("onNetWorkNone");
        if (mNetworkStateView != null) {
            mNetworkStateView.showError();
        }
    }


    public void registerNetWorkStateView(NetworkStateView networkStateView) {
        this.mNetworkStateView = networkStateView;
        if (mNetworkStateView != null) {
            mNetworkStateView.showLoading();
        }
    }

demo地址:github.com/ci250454344/SuperBase

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值