11package com.fuusy.jetpackkt
22
3+ import android.os.Bundle
4+ import android.util.Log
5+ import android.view.View
36import androidx.fragment.app.Fragment
47import androidx.fragment.app.FragmentActivity
8+ import androidx.lifecycle.LiveData
9+ import androidx.lifecycle.Observer
10+ import androidx.navigation.NavController
511import androidx.viewpager2.adapter.FragmentStateAdapter
612import com.alibaba.android.arouter.facade.annotation.Route
713import com.fuusy.common.base.BaseActivity
14+ import com.fuusy.common.ktx.setupWithNavController
815import com.fuusy.common.support.Constants
916import com.fuusy.home.ui.HomeFragment
1017import com.fuusy.jetpackkt.databinding.ActivityMainBinding
18+ import com.fuusy.personal.PersonalFragment
19+ import com.fuusy.project.ui.ProjectFragment
20+
21+ private const val TAG = " MainActivity"
1122
1223@Route(path = Constants .PATH_MAIN )
1324class MainActivity : BaseActivity <ActivityMainBinding >() {
25+ private var currentNavController: LiveData <NavController >? = null
26+
27+ companion object {
28+ private const val INDEX_HOME = 0
29+ private const val INDEX_PROJECT = 1
30+ private const val INDEX_PERSONAL = 2
31+ }
32+
33+ private val fragments = mapOf<Int , Fragment >(
34+ INDEX_HOME to HomeFragment (),
35+ INDEX_PROJECT to ProjectFragment (),
36+ INDEX_PERSONAL to PersonalFragment ()
37+ )
1438
1539 override fun getLayoutId (): Int {
1640 return R .layout.activity_main
1741 }
1842
1943 private lateinit var mFragmentAdapter: VpFragmentAdapter
2044
21- override fun initData () {
22- mFragmentAdapter = VpFragmentAdapter (this )
23- mBinding?.vpFragment?.adapter = mFragmentAdapter
24- mBinding?.vpFragment?.isUserInputEnabled = false
45+ override fun initData (savedInstanceState : Bundle ? ) {
46+ setupBottomNavigationBar()
47+ currentNavController
2548
49+ // mFragmentAdapter = VpFragmentAdapter(this, fragments)
50+ // mBinding?.run {
51+ // BnvMediator(navView,vpFragment){bnv,vp2->
52+ // vp2.isUserInputEnabled = false
53+ // }.attach()
54+ // }
55+ // mBinding?.vpFragment?.adapter = mFragmentAdapter
56+ }
2657
58+ override fun onRestoreInstanceState (savedInstanceState : Bundle ) {
59+ super .onRestoreInstanceState(savedInstanceState)
60+ setupBottomNavigationBar()
2761 }
2862
29- class VpFragmentAdapter (fragment : FragmentActivity ) : FragmentStateAdapter(fragment) {
63+ class VpFragmentAdapter (fragment : FragmentActivity , private val fragments : Map <Int , Fragment >) :
64+ FragmentStateAdapter (fragment) {
3065 override fun getItemCount (): Int {
31- return 1
66+ return fragments.size
3267 }
3368
3469 override fun createFragment (position : Int ): Fragment {
35- return HomeFragment ()
70+ return fragments[position] ? : error(" ViewPager接收参数index越界" )
71+
72+ }
73+ }
74+
3675
76+ /* *
77+ * navigation绑定BottomNavigationView
78+ */
79+ private fun setupBottomNavigationBar () {
80+ val navGraphIds =
81+ listOf (R .navigation.navi_home, R .navigation.navi_project, R .navigation.navi_personal)
82+
83+ mBinding.run {
84+ Log .d(TAG , " setupBottomNavigationBar: " )
3785 }
86+ val controller = mBinding?.navView?.setupWithNavController(
87+ navGraphIds = navGraphIds,
88+ fragmentManager = supportFragmentManager,
89+ containerId = R .id.nav_host_container,
90+ intent = intent
91+ )
92+ controller?.observe(this , Observer { navController ->
93+ // setupActionBarWithNavController(navController)
94+ navController.addOnDestinationChangedListener { controller, destination, arguments ->
95+ run {
96+ val id = destination.id
97+ if (id == R .id.projectContentFragment) {
98+ mBinding?.navView?.visibility = View .GONE
99+ } else {
100+ mBinding?.navView?.visibility = View .VISIBLE
101+ }
102+ }
103+ }
104+ })
105+ currentNavController = controller
106+ }
107+
108+ override fun onSupportNavigateUp (): Boolean {
109+ return currentNavController?.value?.navigateUp() ? : false
38110 }
39111}
0 commit comments