Kotlin Activity封装的基类

本文详细介绍了如何在 Kotlin 中为 Android 开发封装一个基础 Activity 类,以实现代码复用和增强可维护性。通过继承这个基类,开发者可以便捷地在各个 Activity 中使用通用的方法和功能,例如统一的网络请求处理、日志记录、权限管理等。此外,还讨论了如何合理设计基类的结构,避免过度设计,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

open class BaseActivity : AppCompatActivity() {
    var toast: Toast? = null
    lateinit var mContext: Context
    var TAG:String = ""
    var mLoading: Dialog? = null
   var rate:String = ""
    //网络错误重新加载的接口

    lateinit var reloadInterface: ReloadInterface

    fun setReloadInterface(reloadInterface:Any){
        this.reloadInterface = reloadInterface as ReloadInterface
    }
    fun AliBaiChuanLogin(userId:String){
        val alibcLogin = AlibcLogin.getInstance()
        alibcLogin.showLogin(this@BaseActivity, object : AlibcLoginCallback {

            override fun onSuccess() {
//                Toast.makeText(this@LoginOathTaoBaoWebActivity, "登录成功 ",
//                        Toast.LENGTH_LONG).show()
                //获取淘宝用户信息
                Log.i("MainActivity", "获取淘宝用户信息: " + AlibcLogin.getInstance().session)
                AlibcLogin.getInstance().session.nick
                var intent = Intent(this@BaseActivity, LoginOathTaoBaoWebActivity::class.java)
                intent.putExtra("userId",userId)
                startActivity(intent)
//                TaoBaoAuth()
//                webView.reload()
            }

            override fun onFailure(code: Int, msg: String) {
                Toast.makeText(this@BaseActivity, "登录失败 code="+code+"------>msg =" +msg,
                        Toast.LENGTH_LONG).show()
            }
        })
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        super.setContentView(R.layout.activity_base)
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // 禁用横屏
        mLoading = DialogUtils.createLoadingDialog(this)
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        rate = AppApplication.preferences!!.getString("rate","0.40")
//        //透明导航栏
////        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
////        StatusBarUtil.setStatusBarColor(this, Color.parseColor("#ffffff"), 0)
//        //全屏
////        getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
////                WindowManager.LayoutParams. FLAG_FULLSCREEN)
////        StatusBarUtil.setTranslucent(this,55)
//        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        ImmersionBar.with(this)
                .statusBarDarkFont(true, 0.2f) //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
                .init()
//
        mContext = this
        TAG = mContext.javaClass.simpleName
        AppApplication.instance.addActivity(this)
        Glide.with(mContext!!).load(R.drawable.ic_loading).asGif().into(ivLoading)
    }

    override fun setContentView(layoutResID: Int) {
//        super.setContentView(layoutResID)
        val view = layoutInflater.inflate(layoutResID, null)
        var lp:LinearLayout.LayoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT)
        if (null != mRootBaseView) {
            mRootBaseView!!.addView(view, lp)
        }
//        StatusBarUtil.setTransparent(this@BaseActivity)
//        StatusBarUtil.setTranslucent(this@BaseActivity, 25)
    }

    /**
     *
     * @param titleBarIsShow titleBar是否显示
     * @param tvLeftIsShow 返回键是否显示
     * @param middleText 中间的文字
     */
    fun initTitleBar(titleBarIsShow:Boolean,ivLeftIsShow:Boolean,middleText:String){
        if (titleBarIsShow){
            mTitle.visibility = View.VISIBLE
            if (!ivLeftIsShow) {
                ivBack.visibility = View.GONE;
            } else {
                ivBack.setOnClickListener {
                    finish()
                }
            }
            tvTitle.text = middleText
        }else{
            mTitle.visibility = View.GONE
        }
    }
    /**
     * 切换页面的布局
     * @param pageState 页面状态 NORMAL  EMPTY  ERROR
     */
     fun changePageState(pageState: BaseActivity.PageState) {
        when (pageState) {
            BaseActivity.PageState.NORMAL -> if (mStateLayout.visibility === View.VISIBLE) {
                mStateLayout.visibility = View.GONE
            }
            BaseActivity.PageState.ERROR -> if (mStateLayout.visibility === View.GONE) {
                mStateLayout.visibility = View.VISIBLE
                state_layout_error.visibility = View.VISIBLE
                state_layout_error_bt.setOnClickListener { reloadInterface.reloadClickListener() }
                state_layout_empty.visibility = View.GONE
                state_layout_loading.visibility = View.GONE
            }
            BaseActivity.PageState.EMPTY -> if (mStateLayout.visibility === View.GONE) {
                mStateLayout.visibility = View.VISIBLE
                state_layout_error_bt.visibility = View.GONE
                state_layout_empty.visibility = View.VISIBLE
                state_layout_loading.visibility = View.GONE
            }

        }


    }

    override fun onResume() {
        super.onResume()
        MobclickAgent.onResume(this)
    }

    override fun onPause() {
        super.onPause()
        MobclickAgent.onPause(this)
    }
    enum class PageState {
        /**
         * 数据内容显示正常
         */
        NORMAL,
        /**
         * 数据为空
         */
        EMPTY,
        /**
         * 数据加载失败
         */
        ERROR
    }




    fun showToast(content: String){
        if (toast == null) {
            toast = Toast.makeText(mContext,
                    content,
                    Toast.LENGTH_SHORT)
        } else {
            toast!!.setText(content)
        }
        toast!!.show()
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值