Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / view / MainActivity.kt
package com.casic.smarttube.view

import android.os.Bundle
import android.view.KeyEvent
import android.view.MenuItem
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.casic.smarttube.R
import com.casic.smarttube.databinding.ActivityMainBinding
import com.casic.smarttube.extensions.initImmersionBar
import com.casic.smarttube.fragment.HomePageFragment
import com.casic.smarttube.fragment.MinePageFragment
import com.casic.smarttube.fragment.OverviewFragment
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show

class MainActivity : KotlinBaseActivity<ActivityMainBinding>() {

    private var menuItem: MenuItem? = null
    private var fragmentPages: MutableList<Fragment> = ArrayList()
    private var clickTime: Long = 0

    init {
        fragmentPages.add(HomePageFragment())
        fragmentPages.add(OverviewFragment())
        fragmentPages.add(MinePageFragment())
    }

    override fun initViewBinding(): ActivityMainBinding {
        return ActivityMainBinding.inflate(layoutInflater)
    }

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(false).init()
        binding.rootView.initImmersionBar(this, true, R.color.mainThemeColor)
    }

    override fun initOnCreate(savedInstanceState: Bundle?) {
        //保留icon原图颜色
        binding.bottomNavigation.itemIconTintList = null
        binding.bottomNavigation.setOnItemSelectedListener { menuItem ->
            when (menuItem.itemId) {
                R.id.nav_home -> {
                    binding.mainViewPager.currentItem = 0
                }

                R.id.nav_overview -> {
                    binding.mainViewPager.currentItem = 1
                }

                R.id.nav_mine -> {
                    binding.mainViewPager.currentItem = 2
                }
            }
            false
        }
        binding.mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
    }

    override fun observeRequestState() {

    }

    override fun initEvent() {
        binding.mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(state: Int) {

            }

            override fun onPageScrolled(
                position: Int, positionOffset: Float, positionOffsetPixels: Int
            ) {

            }

            override fun onPageSelected(position: Int) {
                if (menuItem != null) {
                    menuItem!!.isChecked = false
                } else {
                    binding.bottomNavigation.menu.getItem(0).isChecked = false
                }
                menuItem = binding.bottomNavigation.menu.getItem(position)
                menuItem!!.isChecked = true
            }
        })
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        return if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (System.currentTimeMillis() - clickTime > 2000) {
                "再按一次退出程序".show(this)
                clickTime = System.currentTimeMillis()
                true
            } else {
                super.onKeyDown(keyCode, event)
            }
        } else super.onKeyDown(keyCode, event)
    }

    inner class ViewPagerAdapter(list: MutableList<Fragment>, manager: FragmentManager) :
        FragmentPagerAdapter(manager) {

        private var viewPages: List<Fragment> = list

        override fun getItem(position: Int): Fragment = viewPages[position]

        override fun getCount(): Int = viewPages.size

        override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {

        }
    }
}