0% found this document useful (0 votes)
68 views

Supportfragmentmanager Container: Oncreate

This Java class defines a BottomTabsActivity that uses a FragNavController to manage navigation between 5 fragment tabs displayed in a bottom navigation bar. It implements various interfaces to handle transactions and navigation between the fragments, initialize the controller on create, and get the root fragment for each tab index.
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
68 views

Supportfragmentmanager Container: Oncreate

This Java class defines a BottomTabsActivity that uses a FragNavController to manage navigation between 5 fragment tabs displayed in a bottom navigation bar. It implements various interfaces to handle transactions and navigation between the fragments, initialize the controller on create, and get the root fragment for each tab index.
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 8

package com.ncapdevi.sample.

activities

import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.appcompat.app.AppCompatActivity
import android.util.Log
import android.view.MenuItem
import android.view.View
import com.ncapdevi.fragnav.FragNavController
import com.ncapdevi.fragnav.FragNavLogger
import com.ncapdevi.fragnav.FragNavSwitchController
import com.ncapdevi.fragnav.FragNavTransactionOptions
import com.ncapdevi.fragnav.tabhistory.UniqueTabHistoryStrategy
import com.ncapdevi.sample.R
import com.ncapdevi.sample.fragments.*
import com.roughike.bottombar.BottomBar

class BottomTabsActivity : AppCompatActivity(),


BaseFragment.FragmentNavigation, FragNavController.TransactionListener,
FragNavController.RootFragmentListener {
override val numberOfRootFragments: Int = 5

private val fragNavController: FragNavController =


FragNavController(supportFragmentManager, R.id.container)

private lateinit var bottomBar: BottomBar

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bottom_tabs)

bottomBar = findViewById(R.id.bottomBar)

fragNavController.apply {
transactionListener = this@BottomTabsActivity
rootFragmentListener = this@BottomTabsActivity
createEager = true
fragNavLogger = object : FragNavLogger {
override fun error(message: String, throwable: Throwable) {
Log.e(TAG, message, throwable)
}
}

defaultTransactionOptions =
FragNavTransactionOptions.newBuilder().customAnimations(R.anim.slide_in_from_ri
ght, R.anim.slide_out_to_left, R.anim.slide_in_from_left,
R.anim.slide_out_to_right).build()
fragmentHideStrategy =
FragNavController.DETACH_ON_NAVIGATE_HIDE_ON_SWITCH

navigationStrategy = UniqueTabHistoryStrategy(object :
FragNavSwitchController {
override fun switchTab(index: Int, transactionOptions:
FragNavTransactionOptions?) {
bottomBar.selectTabAtPosition(index)
}
})
}

fragNavController.initialize(INDEX_NEARBY, savedInstanceState)

val initial = savedInstanceState == null


if (initial) {
bottomBar.selectTabAtPosition(INDEX_NEARBY)
}

bottomBar.setOnTabSelectListener({ tabId ->


when (tabId) {
R.id.bb_menu_recents ->
fragNavController.switchTab(INDEX_RECENTS)
R.id.bb_menu_favorites ->
fragNavController.switchTab(INDEX_FAVORITES)
R.id.bb_menu_nearby ->
fragNavController.switchTab(INDEX_NEARBY)
R.id.bb_menu_friends ->
fragNavController.switchTab(INDEX_FRIENDS)
R.id.bb_menu_food -> fragNavController.switchTab(INDEX_FOOD)
}
}, initial)

bottomBar.setOnTabReselectListener { fragNavController.clearStack() }
}

override fun onBackPressed() {


if (fragNavController.popFragment().not()) {
super.onBackPressed()
}
}

override fun onSaveInstanceState(outState: Bundle?) {


super.onSaveInstanceState(outState)
fragNavController.onSaveInstanceState(outState!!)

override fun pushFragment(fragment: Fragment, sharedElementList:


List<Pair<View, String>>?) {
val options = FragNavTransactionOptions.newBuilder()
options.reordering = true
sharedElementList?.let {
it.forEach { pair ->
options.addSharedElement(pair)
}
}
fragNavController.pushFragment(fragment, options.build())

override fun onTabTransaction(fragment: Fragment?, index: Int) {


// If we have a backstack, show the back button

supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.no
t())

override fun onFragmentTransaction(fragment: Fragment?, transactionType:


FragNavController.TransactionType) {
//do fragmentty stuff. Maybe change title, I'm not going to tell you
how to live your life
// If we have a backstack, show the back button

supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.no
t())

override fun getRootFragment(index: Int): Fragment {


when (index) {
INDEX_RECENTS -> return RecentsFragment.newInstance(0)
INDEX_FAVORITES -> return FavoritesFragment.newInstance(0)
INDEX_NEARBY -> return NearbyFragment.newInstance(0)
INDEX_FRIENDS -> return FriendsFragment.newInstance(0)
INDEX_FOOD -> return FoodFragment.newInstance(0)
}
throw IllegalStateException("Need to send an index that we know")
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {


when (item.itemId) {
android.R.id.home -> fragNavController.popFragment()
}
return true
}

companion object {
private val TAG = BottomTabsActivity::class.java.simpleName
}
}

package com.ncapdevi.sample.activities

import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.appcompat.app.AppCompatActivity
import android.util.Log
import android.view.MenuItem
import android.view.View
import com.ncapdevi.fragnav.FragNavController
import com.ncapdevi.fragnav.FragNavLogger
import com.ncapdevi.fragnav.FragNavSwitchController
import com.ncapdevi.fragnav.FragNavTransactionOptions
import com.ncapdevi.fragnav.tabhistory.UniqueTabHistoryStrategy
import com.ncapdevi.sample.R
import com.ncapdevi.sample.fragments.*
import com.roughike.bottombar.BottomBar

class BottomTabsActivity : AppCompatActivity(),


BaseFragment.FragmentNavigation, FragNavController.TransactionListener,
FragNavController.RootFragmentListener {
override val numberOfRootFragments: Int = 5

private val fragNavController: FragNavController =


FragNavController(supportFragmentManager, R.id.container)

private lateinit var bottomBar: BottomBar

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bottom_tabs)

bottomBar = findViewById(R.id.bottomBar)
fragNavController.apply {
transactionListener = this@BottomTabsActivity
rootFragmentListener = this@BottomTabsActivity
createEager = true
fragNavLogger = object : FragNavLogger {
override fun error(message: String, throwable: Throwable) {
Log.e(TAG, message, throwable)
}
}

defaultTransactionOptions =
FragNavTransactionOptions.newBuilder().customAnimations(R.anim.slide_in_from_ri
ght, R.anim.slide_out_to_left, R.anim.slide_in_from_left,
R.anim.slide_out_to_right).build()
fragmentHideStrategy =
FragNavController.DETACH_ON_NAVIGATE_HIDE_ON_SWITCH

navigationStrategy = UniqueTabHistoryStrategy(object :
FragNavSwitchController {
override fun switchTab(index: Int, transactionOptions:
FragNavTransactionOptions?) {
bottomBar.selectTabAtPosition(index)
}
})
}

fragNavController.initialize(INDEX_NEARBY, savedInstanceState)

val initial = savedInstanceState == null


if (initial) {
bottomBar.selectTabAtPosition(INDEX_NEARBY)
}

bottomBar.setOnTabSelectListener({ tabId ->


when (tabId) {
R.id.bb_menu_recents ->
fragNavController.switchTab(INDEX_RECENTS)
R.id.bb_menu_favorites ->
fragNavController.switchTab(INDEX_FAVORITES)
R.id.bb_menu_nearby ->
fragNavController.switchTab(INDEX_NEARBY)
R.id.bb_menu_friends ->
fragNavController.switchTab(INDEX_FRIENDS)
R.id.bb_menu_food -> fragNavController.switchTab(INDEX_FOOD)
}
}, initial)

bottomBar.setOnTabReselectListener { fragNavController.clearStack() }
}

override fun onBackPressed() {


if (fragNavController.popFragment().not()) {
super.onBackPressed()
}
}

override fun onSaveInstanceState(outState: Bundle?) {


super.onSaveInstanceState(outState)
fragNavController.onSaveInstanceState(outState!!)

}
override fun pushFragment(fragment: Fragment, sharedElementList:
List<Pair<View, String>>?) {
val options = FragNavTransactionOptions.newBuilder()
options.reordering = true
sharedElementList?.let {
it.forEach { pair ->
options.addSharedElement(pair)
}
}
fragNavController.pushFragment(fragment, options.build())

override fun onTabTransaction(fragment: Fragment?, index: Int) {


// If we have a backstack, show the back button

supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.no
t())

override fun onFragmentTransaction(fragment: Fragment?, transactionType:


FragNavController.TransactionType) {
//do fragmentty stuff. Maybe change title, I'm not going to tell you
how to live your life
// If we have a backstack, show the back button

supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.no
t())

override fun getRootFragment(index: Int): Fragment {


when (index) {
INDEX_RECENTS -> return RecentsFragment.newInstance(0)
INDEX_FAVORITES -> return FavoritesFragment.newInstance(0)
INDEX_NEARBY -> return NearbyFragment.newInstance(0)
INDEX_FRIENDS -> return FriendsFragment.newInstance(0)
INDEX_FOOD -> return FoodFragment.newInstance(0)
}
throw IllegalStateException("Need to send an index that we know")
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {


when (item.itemId) {
android.R.id.home -> fragNavController.popFragment()
}
return true
}

companion object {
private val TAG = BottomTabsActivity::class.java.simpleName
}
}

package com.ncapdevi.sample.activities

import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.appcompat.app.AppCompatActivity
import android.util.Log
import android.view.MenuItem
import android.view.View
import com.ncapdevi.fragnav.FragNavController
import com.ncapdevi.fragnav.FragNavLogger
import com.ncapdevi.fragnav.FragNavSwitchController
import com.ncapdevi.fragnav.FragNavTransactionOptions
import com.ncapdevi.fragnav.tabhistory.UniqueTabHistoryStrategy
import com.ncapdevi.sample.R
import com.ncapdevi.sample.fragments.*
import com.roughike.bottombar.BottomBar

class BottomTabsActivity : AppCompatActivity(),


BaseFragment.FragmentNavigation, FragNavController.TransactionListener,
FragNavController.RootFragmentListener {
override val numberOfRootFragments: Int = 5

private val fragNavController: FragNavController =


FragNavController(supportFragmentManager, R.id.container)

private lateinit var bottomBar: BottomBar

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bottom_tabs)

bottomBar = findViewById(R.id.bottomBar)

fragNavController.apply {
transactionListener = this@BottomTabsActivity
rootFragmentListener = this@BottomTabsActivity
createEager = true
fragNavLogger = object : FragNavLogger {
override fun error(message: String, throwable: Throwable) {
Log.e(TAG, message, throwable)
}
}

defaultTransactionOptions =
FragNavTransactionOptions.newBuilder().customAnimations(R.anim.slide_in_from_ri
ght, R.anim.slide_out_to_left, R.anim.slide_in_from_left,
R.anim.slide_out_to_right).build()
fragmentHideStrategy =
FragNavController.DETACH_ON_NAVIGATE_HIDE_ON_SWITCH

navigationStrategy = UniqueTabHistoryStrategy(object :
FragNavSwitchController {
override fun switchTab(index: Int, transactionOptions:
FragNavTransactionOptions?) {
bottomBar.selectTabAtPosition(index)
}
})
}

fragNavController.initialize(INDEX_NEARBY, savedInstanceState)

val initial = savedInstanceState == null


if (initial) {
bottomBar.selectTabAtPosition(INDEX_NEARBY)
}
bottomBar.setOnTabSelectListener({ tabId ->
when (tabId) {
R.id.bb_menu_recents ->
fragNavController.switchTab(INDEX_RECENTS)
R.id.bb_menu_favorites ->
fragNavController.switchTab(INDEX_FAVORITES)
R.id.bb_menu_nearby ->
fragNavController.switchTab(INDEX_NEARBY)
R.id.bb_menu_friends ->
fragNavController.switchTab(INDEX_FRIENDS)
R.id.bb_menu_food -> fragNavController.switchTab(INDEX_FOOD)
}
}, initial)

bottomBar.setOnTabReselectListener { fragNavController.clearStack() }
}

override fun onBackPressed() {


if (fragNavController.popFragment().not()) {
super.onBackPressed()
}
}

override fun onSaveInstanceState(outState: Bundle?) {


super.onSaveInstanceState(outState)
fragNavController.onSaveInstanceState(outState!!)

override fun pushFragment(fragment: Fragment, sharedElementList:


List<Pair<View, String>>?) {
val options = FragNavTransactionOptions.newBuilder()
options.reordering = true
sharedElementList?.let {
it.forEach { pair ->
options.addSharedElement(pair)
}
}
fragNavController.pushFragment(fragment, options.build())

override fun onTabTransaction(fragment: Fragment?, index: Int) {


// If we have a backstack, show the back button

supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.no
t())

override fun onFragmentTransaction(fragment: Fragment?, transactionType:


FragNavController.TransactionType) {
//do fragmentty stuff. Maybe change title, I'm not going to tell you
how to live your life
// If we have a backstack, show the back button

supportActionBar?.setDisplayHomeAsUpEnabled(fragNavController.isRootFragment.no
t())

}
override fun getRootFragment(index: Int): Fragment {
when (index) {
INDEX_RECENTS -> return RecentsFragment.newInstance(0)
INDEX_FAVORITES -> return FavoritesFragment.newInstance(0)
INDEX_NEARBY -> return NearbyFragment.newInstance(0)
INDEX_FRIENDS -> return FriendsFragment.newInstance(0)
INDEX_FOOD -> return FoodFragment.newInstance(0)
}
throw IllegalStateException("Need to send an index that we know")
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {


when (item.itemId) {
android.R.id.home -> fragNavController.popFragment()
}
return true
}

companion object {
private val TAG = BottomTabsActivity::class.java.simpleName
}
}

You might also like