|
|
@@ -0,0 +1,278 @@
|
|
|
+package com.yingyangfly.baselib.base
|
|
|
+
|
|
|
+import android.annotation.SuppressLint
|
|
|
+import android.app.AlertDialog
|
|
|
+import android.content.Context
|
|
|
+import android.content.pm.ActivityInfo
|
|
|
+import android.os.Bundle
|
|
|
+import android.view.ViewGroup
|
|
|
+import android.view.inputmethod.InputMethodManager
|
|
|
+import android.widget.EditText
|
|
|
+import android.widget.LinearLayout
|
|
|
+import androidx.appcompat.app.AppCompatActivity
|
|
|
+import androidx.databinding.ViewDataBinding
|
|
|
+import androidx.fragment.app.Fragment
|
|
|
+import com.alibaba.android.arouter.launcher.ARouter
|
|
|
+import com.scwang.smartrefresh.layout.api.RefreshLayout
|
|
|
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
|
|
|
+import com.yingyangfly.baselib.R
|
|
|
+import com.yingyangfly.baselib.databinding.ActivityBaseBinding
|
|
|
+import com.yingyangfly.baselib.db.AppDataBase
|
|
|
+import com.yingyangfly.baselib.dialog.LoadingDialog
|
|
|
+import com.yingyangfly.baselib.dialog.TaskFragment
|
|
|
+import com.yingyangfly.baselib.ext.getDbClass
|
|
|
+import com.yingyangfly.baselib.ext.initBar
|
|
|
+import com.yingyangfly.baselib.utils.*
|
|
|
+import gorden.rxbus2.RxBus
|
|
|
+
|
|
|
+/**
|
|
|
+ * activity基类
|
|
|
+ */
|
|
|
+abstract class BaseGameActivity<DB : ViewDataBinding> : AppCompatActivity(),
|
|
|
+ OnRefreshLoadMoreListener {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 确定初始化将总是发生在单个线程,那么你可以使用 LazyThreadSafetyMode.NONE模式, 它不会有任何线程安全的保证和相关的开销。
|
|
|
+ * 如果初始化委托的同步锁不是必需的,这样多个线程可以同时执行,那么将 LazyThreadSafetyMode.PUBLICATION 作为参数传递给 lazy() 函数
|
|
|
+ */
|
|
|
+ val binding: DB by lazy(LazyThreadSafetyMode.NONE) {
|
|
|
+ getDbClass(this)
|
|
|
+ }
|
|
|
+
|
|
|
+ val bindingBase: ActivityBaseBinding by lazy {
|
|
|
+ ActivityBaseBinding.inflate(layoutInflater)
|
|
|
+ }
|
|
|
+
|
|
|
+ lateinit var mContext: Context
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否执行了下拉刷新或上拉加载
|
|
|
+ */
|
|
|
+ private var isRefreshOrLoadMore = false
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载loading
|
|
|
+ */
|
|
|
+ val netLoading: LoadingDialog by lazy {
|
|
|
+ LoadingDialog(mContext)
|
|
|
+ }
|
|
|
+
|
|
|
+ private var logoutDialog: AlertDialog? = null
|
|
|
+
|
|
|
+ var db: AppDataBase? = null
|
|
|
+
|
|
|
+ @SuppressLint("SourceLockedOrientationActivity")
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+ RxBus.get().register(this)
|
|
|
+ mContext = this
|
|
|
+ initWindow()
|
|
|
+ // 默认不全屏,底部导航栏透明
|
|
|
+ initBar(false)
|
|
|
+ ARouter.getInstance().inject(this)
|
|
|
+ ActivityManagers.instance.addActivity(this)
|
|
|
+ initSmartRefresh()
|
|
|
+ val params: ViewGroup.LayoutParams = LinearLayout.LayoutParams(
|
|
|
+ LinearLayout.LayoutParams.MATCH_PARENT,
|
|
|
+ LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
|
|
|
+ )
|
|
|
+ binding.root.layoutParams = params
|
|
|
+ bindingBase.llytContent.addView(binding.root)
|
|
|
+ setContentView(ViewTool.inflateLayoutPixels(this, bindingBase.root, 2388, 1668))
|
|
|
+ requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
|
|
+ db = AppDataBase.getInstance(mContext)
|
|
|
+ initMVVM()
|
|
|
+ initViews()
|
|
|
+ initListener()
|
|
|
+ initData()
|
|
|
+ initLiveEventBusUtil()
|
|
|
+ }
|
|
|
+
|
|
|
+ protected inline fun binding(block: DB.() -> Unit): DB {
|
|
|
+ return binding.apply(block)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化View
|
|
|
+ */
|
|
|
+ abstract fun initViews()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化监听
|
|
|
+ */
|
|
|
+ abstract fun initListener()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化数据源 or 请求
|
|
|
+ */
|
|
|
+ abstract fun initData()
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 需要设置window参数可重写此方法
|
|
|
+ */
|
|
|
+ open fun initWindow() {}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化数据源 or 请求
|
|
|
+ */
|
|
|
+ open fun initMVVM() {}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化下拉刷新布局
|
|
|
+ */
|
|
|
+ fun initSmartRefresh() {
|
|
|
+ // 是否启用下拉刷新功能
|
|
|
+ bindingBase.smartRefreshLayout.setEnableRefresh(false)
|
|
|
+ // 是否启用上拉加载功能
|
|
|
+ bindingBase.smartRefreshLayout.setEnableLoadMore(false)
|
|
|
+ // 关闭越界回弹功能
|
|
|
+ bindingBase.smartRefreshLayout.setEnableOverScrollBounce(false)
|
|
|
+ // 禁止越界拖动
|
|
|
+ bindingBase.smartRefreshLayout.setEnableOverScrollDrag(false)
|
|
|
+ bindingBase.smartRefreshLayout.setOnRefreshLoadMoreListener(this)
|
|
|
+ //设置刷新头和加载头的背景色
|
|
|
+ bindingBase.smartRefreshLayout.refreshHeader?.view?.setBackgroundColor(ResUtil.getColor(R.color.color_F5F5F5))
|
|
|
+ bindingBase.smartRefreshLayout.refreshFooter?.view?.setBackgroundColor(ResUtil.getColor(R.color.color_F5F5F5))
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否需要下拉刷新加载更多布局 默认不需要
|
|
|
+ */
|
|
|
+ open fun enableRefreshLoadMore() = false
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下拉刷新
|
|
|
+ */
|
|
|
+ override fun onRefresh(refreshLayout: RefreshLayout) {
|
|
|
+ isRefreshOrLoadMore = true
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载更多
|
|
|
+ */
|
|
|
+ override fun onLoadMore(refreshLayout: RefreshLayout) {
|
|
|
+ isRefreshOrLoadMore = true
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否自动刷新
|
|
|
+ */
|
|
|
+ fun autoRefresh() {
|
|
|
+ bindingBase.smartRefreshLayout.autoRefresh()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否下拉刷新,默认不能下拉刷新
|
|
|
+ */
|
|
|
+ fun enableRefresh(refresh: Boolean) {
|
|
|
+ bindingBase.smartRefreshLayout.setEnableRefresh(refresh)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否加载更多,默认不加载更多
|
|
|
+ */
|
|
|
+ fun enableLoadMore(loadMore: Boolean) {
|
|
|
+ bindingBase.smartRefreshLayout.setEnableLoadMore(loadMore)
|
|
|
+ bindingBase.smartRefreshLayout.setEnableFooterFollowWhenNoMoreData(true)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 结束下拉刷新
|
|
|
+ */
|
|
|
+ fun finishRefresh() {
|
|
|
+ isRefreshOrLoadMore = false
|
|
|
+ bindingBase.smartRefreshLayout.finishRefresh()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 结束加载更多
|
|
|
+ */
|
|
|
+ fun finishLoadMore() {
|
|
|
+ isRefreshOrLoadMore = false
|
|
|
+ bindingBase.smartRefreshLayout.finishLoadMore()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 结束加载更多,且没有更多数据
|
|
|
+ */
|
|
|
+ fun finishLoadMoreWithNoMoreData() {
|
|
|
+ isRefreshOrLoadMore = false
|
|
|
+ bindingBase.smartRefreshLayout.finishLoadMoreWithNoMoreData()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置没有更多数据
|
|
|
+ */
|
|
|
+ fun resetNoMoreData() {
|
|
|
+ bindingBase.smartRefreshLayout.resetNoMoreData()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示Loading
|
|
|
+ */
|
|
|
+ fun showLoading() {
|
|
|
+ if (isRefreshOrLoadMore) return
|
|
|
+ netLoading.show()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取消Loading
|
|
|
+ */
|
|
|
+ fun dismissLoading() {
|
|
|
+ netLoading.dismiss()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示键盘
|
|
|
+ */
|
|
|
+ fun showInput(et: EditText) {
|
|
|
+ et.requestFocus()
|
|
|
+ val imm: InputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
|
|
|
+ imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关闭软键盘
|
|
|
+ */
|
|
|
+ fun closeKeyBord(mEditText: EditText, mContext: Context) {
|
|
|
+ val imm = mContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
|
+ imm.hideSoftInputFromWindow(mEditText.windowToken, 0)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onDestroy() {
|
|
|
+ super.onDestroy()
|
|
|
+ RxBus.get().unRegister(this)
|
|
|
+ ActivityManagers.instance.removeActivity(this)
|
|
|
+ }
|
|
|
+
|
|
|
+ var showFragment: Fragment? = null
|
|
|
+ fun showFragment(viewId: Int, f: Fragment) {
|
|
|
+ try {
|
|
|
+ val ft = supportFragmentManager.beginTransaction()
|
|
|
+ if (showFragment != null)
|
|
|
+ ft.hide(showFragment!!)
|
|
|
+ if (f.isAdded) {
|
|
|
+ ft.show(f)
|
|
|
+ } else {
|
|
|
+ ft.add(viewId, f)
|
|
|
+ }
|
|
|
+ showFragment = f
|
|
|
+ ft.commitAllowingStateLoss()
|
|
|
+ supportFragmentManager.executePendingTransactions()// 立即执行
|
|
|
+ } catch (e: Exception) {
|
|
|
+ e.printStackTrace()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun initLiveEventBusUtil() {
|
|
|
+ //展示任务弹窗
|
|
|
+ LiveEventBusUtil.observer<String>(this, RxBusCodes.SHOWTASKDIALOG) {
|
|
|
+ val taskFragment = TaskFragment()
|
|
|
+ taskFragment.setTaskDesn(it, "")
|
|
|
+ taskFragment.onDialogClickListener = {
|
|
|
+
|
|
|
+ }
|
|
|
+ taskFragment.show(supportFragmentManager, "taskFragment")
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|