@@ -10,89 +10,95 @@ import com.ncapdevi.fragnav.FragNavLogger
10
10
import com.ncapdevi.fragnav.FragNavSwitchController
11
11
import com.ncapdevi.fragnav.FragNavTransactionOptions
12
12
import com.ncapdevi.fragnav.tabhistory.FragNavTabHistoryController
13
+ import com.ncapdevi.fragnav.tabhistory.UniqueTabHistoryStrategy
13
14
import com.ncapdevi.sample.R
14
15
import com.ncapdevi.sample.fragments.*
15
16
import com.roughike.bottombar.BottomBar
16
17
17
18
18
19
class BottomTabsActivity : AppCompatActivity (), BaseFragment.FragmentNavigation, FragNavController.TransactionListener, FragNavController.RootFragmentListener {
20
+ override val numberOfRootFragments: Int = 5
19
21
20
- private var fragNavController: FragNavController ? = null
22
+ private val fragNavController: FragNavController = FragNavController (supportFragmentManager, R .id.container)
23
+
24
+ private lateinit var bottomBar: BottomBar
21
25
22
26
override fun onCreate (savedInstanceState : Bundle ? ) {
23
27
super .onCreate(savedInstanceState)
24
28
setContentView(com.ncapdevi.sample.R .layout.activity_bottom_tabs)
25
29
26
- val bottomBar = findViewById<BottomBar >(R .id.bottomBar)
27
-
28
- fragNavController = FragNavController .newBuilder(savedInstanceState,
29
- supportFragmentManager,
30
- R .id.container)
31
- .transactionListener(this )
32
- .rootFragmentListener(this , 5 )
33
- .switchController(FragNavTabHistoryController .UNIQUE_TAB_HISTORY , object : FragNavSwitchController {
34
- override fun switchTab (index : Int , transactionOptions : FragNavTransactionOptions ? ) {
35
- bottomBar.selectTabAtPosition(index)
36
- }
37
- })
38
- .fragmentHideStrategy(FragNavController .DETACH_ON_NAVIGATE_HIDE_ON_SWITCH )
39
- .eager(true )
40
- .logger(object : FragNavLogger {
41
- override fun error (message : String , throwable : Throwable ) {
42
- Log .e(TAG , message, throwable)
43
- }
44
- })
45
- .build()
30
+ bottomBar = findViewById(R .id.bottomBar)
31
+
32
+ fragNavController.apply {
33
+ transactionListener = this @BottomTabsActivity
34
+ rootFragmentListener = this @BottomTabsActivity
35
+ createEager = true
36
+ fragNavLogger = object : FragNavLogger {
37
+ override fun error (message : String , throwable : Throwable ) {
38
+ Log .e(TAG , message, throwable)
39
+ }
40
+ }
41
+
42
+ fragmentHideStrategy = FragNavController .DETACH_ON_NAVIGATE_HIDE_ON_SWITCH
43
+
44
+ navigationStrategy = UniqueTabHistoryStrategy (object : FragNavSwitchController {
45
+ override fun switchTab (index : Int , transactionOptions : FragNavTransactionOptions ? ) {
46
+ bottomBar.selectTabAtPosition(index)
47
+ }
48
+ })
49
+ }
50
+
51
+ fragNavController.initialize(INDEX_NEARBY , savedInstanceState)
46
52
47
53
val initial = savedInstanceState == null
48
54
if (initial) {
49
55
bottomBar.selectTabAtPosition(INDEX_NEARBY )
50
56
}
51
57
52
58
53
- fragNavController? .executePendingTransactions()
59
+ fragNavController.executePendingTransactions()
54
60
bottomBar.setOnTabSelectListener({ tabId ->
55
61
when (tabId) {
56
- R .id.bb_menu_recents -> fragNavController? .switchTab(INDEX_RECENTS )
57
- R .id.bb_menu_favorites -> fragNavController? .switchTab(INDEX_FAVORITES )
58
- R .id.bb_menu_nearby -> fragNavController? .switchTab(INDEX_NEARBY )
59
- R .id.bb_menu_friends -> fragNavController? .switchTab(INDEX_FRIENDS )
60
- R .id.bb_menu_food -> fragNavController? .switchTab(INDEX_FOOD )
62
+ R .id.bb_menu_recents -> fragNavController.switchTab(INDEX_RECENTS )
63
+ R .id.bb_menu_favorites -> fragNavController.switchTab(INDEX_FAVORITES )
64
+ R .id.bb_menu_nearby -> fragNavController.switchTab(INDEX_NEARBY )
65
+ R .id.bb_menu_friends -> fragNavController.switchTab(INDEX_FRIENDS )
66
+ R .id.bb_menu_food -> fragNavController.switchTab(INDEX_FOOD )
61
67
}
62
68
}, initial)
63
69
64
- bottomBar.setOnTabReselectListener { fragNavController? .clearStack() }
70
+ bottomBar.setOnTabReselectListener { fragNavController.clearStack() }
65
71
66
72
}
67
73
68
74
override fun onBackPressed () {
69
- if (fragNavController? .popFragment()? .not () == true ) {
75
+ if (fragNavController.popFragment().not ()) {
70
76
super .onBackPressed()
71
77
}
72
78
}
73
79
74
80
override fun onSaveInstanceState (outState : Bundle ? ) {
75
81
super .onSaveInstanceState(outState)
76
- fragNavController? .onSaveInstanceState(outState!! )
82
+ fragNavController.onSaveInstanceState(outState!! )
77
83
78
84
}
79
85
80
86
override fun pushFragment (fragment : Fragment ) {
81
- fragNavController? .pushFragment(fragment)
87
+ fragNavController.pushFragment(fragment)
82
88
83
89
}
84
90
85
91
override fun onTabTransaction (fragment : Fragment ? , index : Int ) {
86
92
// If we have a backstack, show the back button
87
- supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController? .isRootFragment? .not () == true )
93
+ supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.not ())
88
94
89
95
}
90
96
91
97
92
98
override fun onFragmentTransaction (fragment : Fragment ? , transactionType : FragNavController .TransactionType ) {
93
99
// do fragmentty stuff. Maybe change title, I'm not going to tell you how to live your life
94
100
// If we have a backstack, show the back button
95
- supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController? .isRootFragment? .not () == true )
101
+ supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.not ())
96
102
97
103
}
98
104
@@ -109,7 +115,7 @@ class BottomTabsActivity : AppCompatActivity(), BaseFragment.FragmentNavigation,
109
115
110
116
override fun onOptionsItemSelected (item : MenuItem ): Boolean {
111
117
when (item.itemId) {
112
- android.R .id.home -> fragNavController? .popFragment()
118
+ android.R .id.home -> fragNavController.popFragment()
113
119
}
114
120
return true
115
121
}
0 commit comments