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<BasePageFragment>
|
|
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()
|
}
|
|
|
}
|