package com.example.smart.ui.main import android.view.LayoutInflater import android.view.View import androidx.activity.viewModels import androidx.lifecycle.Observer import com.example.basecore.BaseBindingActivity import com.example.basecore.util.sysbar.StatusBarUtils import com.example.smart.R import com.example.smart.databinding.ActivityMainBinding import com.example.smart.ui.home.BasePageFragment class MainActivity : BaseBindingActivity() { private val viewModel: MainViewModel by viewModels() private lateinit var mPageList: ArrayList private val binding by lazy { ActivityMainBinding.inflate(LayoutInflater.from(mContext)) } override fun getRootView(): View = binding.root override fun initView() { StatusBarUtils.transparentMode(this, true, isFullScreen = true) viewModel.generateTab(mContext, binding.tabContainer) mPageList = viewModel.generatePage() loadRootPage() initData() } private fun initData() { val permissionList = listOf( "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_PHONE_STATE", android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION ) requestPermission(permissionList) } override fun bindDataObserver() { viewModel.run { tabProvider.homeTabObserver.observe(this@MainActivity, Observer { if (it.position == it.lastPosition) { } else { showFragment(mPageList[it.position], mPageList[it.lastPosition]) } }) } } /** * load root page */ private fun loadRootPage() { val transaction = supportFragmentManager.beginTransaction() if (!mPageList[0].isAdded) { transaction.add(R.id.container, mPageList[0]) transaction.commit() } } /** * switch page */ private fun showFragment(to: BasePageFragment, from: BasePageFragment) { val transaction = supportFragmentManager.beginTransaction() if (to.isAdded) { transaction.hide(from).show(to) } else { transaction.hide(from).add(R.id.container, to) } //fragment重建丢失 transaction.commitAllowingStateLoss() //解决fragment重复添加 supportFragmentManager.executePendingTransactions() } }