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

import android.view.KeyEvent
import android.view.MenuItem
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.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.convertColor
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : KotlinBaseActivity() {

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

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

    override fun initLayoutView(): Int = R.layout.activity_main

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(false).init()
        ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
    }

    override fun initData() {
        //保留icon原图颜色
        bottomNavigation.itemIconTintList = null
        bottomNavigation.setOnItemSelectedListener { menuItem ->
            when (menuItem.itemId) {
                R.id.nav_home -> {
                    mainViewPager.currentItem = 0
                }
                R.id.nav_overview -> {
                    mainViewPager.currentItem = 1
                }
                R.id.nav_mine -> {
                    mainViewPager.currentItem = 2
                }
            }
            false
        }
        mainViewPager.adapter = ViewPagerAdapter(fragmentList, supportFragmentManager)
        mainViewPager.offscreenPageLimit = fragmentList.size //缓存页数
    }

    override fun initEvent() {
        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 {
                    bottomNavigation.menu.getItem(0).isChecked = false
                }
                menuItem = 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
    }
}