Skip to content

Commit

Permalink
fix: don't replace fragment on another fragment if they are the same (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
naivekook committed Mar 2, 2021
1 parent 43b9850 commit 97624bd
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 63 deletions.
Expand Up @@ -169,7 +169,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
setLanguageInPrefs(this, getLanguage(this))
setSupportActionBar(binding.toolbarInclude.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
swapToHomeFragment()
swapToFragment(HomeFragment.newInstance())

// chrome custom tab init
customTabActivityHelper = CustomTabActivityHelper()
Expand Down Expand Up @@ -270,7 +270,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
when (drawerItem.identifier.toInt()) {
ITEM_HOME -> newFragment = HomeFragment.newInstance()
ITEM_SEARCH_BY_CODE -> {
newFragment = SearchByCodeFragment()
newFragment = SearchByCodeFragment.newInstance()
binding.bottomNavigationInclude.bottomNavigation.selectNavigationItem(0)
}
ITEM_CATEGORIES -> CategoryActivity.start(this@MainActivity)
Expand Down Expand Up @@ -333,12 +333,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
}

}
newFragment?.let {
supportFragmentManager.commit {
replace(R.id.fragment_container, it)
addToBackStack(null)
}
}
newFragment?.let(::swapToFragment)
return false
}
})
Expand Down Expand Up @@ -427,9 +422,14 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
}
}

private fun swapToHomeFragment() {
supportFragmentManager.addOnBackStackChangedListener {}
supportFragmentManager.commit { replace(R.id.fragment_container, HomeFragment()) }
private fun swapToFragment(fragment: Fragment) {
val currentFragment = supportFragmentManager.fragments.lastOrNull()
if (currentFragment == null || currentFragment::class.java != fragment::class.java) {
supportFragmentManager.commit {
replace(R.id.fragment_container, fragment)
addToBackStack(null)
}
}
binding.toolbarInclude.toolbar.title = BuildConfig.APP_NAME
}

Expand Down Expand Up @@ -711,8 +711,11 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
/**
* This moves the main activity to the barcode entry fragment.
*/
private fun swapToSearchByCode() =
changeFragment(SearchByCodeFragment(), ITEM_SEARCH_BY_CODE.toLong(), resources.getString(R.string.search_by_barcode_drawer))
private fun swapToSearchByCode() {
swapToFragment(SearchByCodeFragment.newInstance())
drawerResult.setSelection(ITEM_SEARCH_BY_CODE.toLong())
supportActionBar?.title = resources.getString(R.string.search_by_barcode_drawer)
}

override fun setItemSelected(@NavigationDrawerType type: Int) = drawerResult.setSelection(type.toLong(), false)

Expand Down Expand Up @@ -849,47 +852,6 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {

}

/**
* Used to navigate Fragments which are children of `MainActivity`.
* Use this method when the `Fragment` APPEARS in the `Drawer`.
*
* @param fragment The fragment class to display.
* @param title The title that should be displayed on the top toolbar.
* @param drawerName The fragment as it appears in the drawer. See [NavigationDrawerListener] for the value.
* @author ross-holloway94
* @see [Related Stack Overflow article](https://stackoverflow.com/questions/45138446/calling-fragment-from-recyclerview-adapter)
*
* @since 06/16/18
*/
private fun changeFragment(fragment: Fragment, drawerName: Long, title: String? = null) {
changeFragment(fragment, title)
drawerResult.setSelection(drawerName)
}

/**
* Used to navigate Fragments which are children of `MainActivity`.
* Use this method when the `Fragment` DOES NOT APPEAR in the `Drawer`.
*
* @param fragment The fragment class to display.
* @param title The title that should be displayed on the top toolbar.
* @author ross-holloway94
* @see [Related Stack Overflow article](https://stackoverflow.com/questions/45138446/calling-fragment-from-recyclerview-adapter)
*
* @since 06/16/18
*/
@JvmOverloads
fun changeFragment(fragment: Fragment, title: String? = null) {
val backStateName = fragment::class.simpleName
val fragmentPopped = supportFragmentManager.popBackStackImmediate(backStateName, 0)
if (!fragmentPopped && supportFragmentManager.findFragmentByTag(backStateName) == null) {
supportFragmentManager.commit {
replace(R.id.fragment_container, fragment, backStateName)
addToBackStack(backStateName)
}
}
title?.let { supportActionBar?.title = it }
}

companion object {
private const val USER_ID: Long = 500
private const val CONTRIBUTIONS_SHORTCUT = "CONTRIBUTIONS"
Expand Down
Expand Up @@ -380,4 +380,4 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare
const val LOGIN_PREF = "login"
fun newInstance() = PreferencesFragment().apply { arguments = Bundle() }
}
}
}
Expand Up @@ -221,4 +221,4 @@ class AllergensAlertFragment : NavigationBaseFragment() {
@JvmStatic
fun newInstance() = AllergensAlertFragment().apply { arguments = Bundle() }
}
}
}
Expand Up @@ -34,10 +34,7 @@ class CommonBottomListener internal constructor(private val currentActivity: Act
}
R.id.home_page, R.id.home -> {
if (isCurrentActivity(WelcomeActivity::class.java) || isCurrentActivity(MainActivity::class.java)) {
(currentActivity as FragmentActivity).supportFragmentManager.commit {
replace(R.id.fragment_container, HomeFragment())
addToBackStack(null)
}
openHomeFragment()
return true
}
currentActivity.startActivity(createIntent(MainActivity::class.java))
Expand All @@ -59,6 +56,18 @@ class CommonBottomListener internal constructor(private val currentActivity: Act
return true
}

private fun openHomeFragment() {
(currentActivity as FragmentActivity).supportFragmentManager.let {
val fragment = it.fragments.lastOrNull()
if (fragment == null || fragment !is HomeFragment) {
it.commit {
replace(R.id.fragment_container, HomeFragment.newInstance())
addToBackStack(null)
}
}
}
}

private fun openScanActivity() {
// If already on the continuous scan activity, just lower the bottom sheet
if (isCurrentActivity(ContinuousScanActivity::class.java)) {
Expand Down Expand Up @@ -107,4 +116,4 @@ class CommonBottomListener internal constructor(private val currentActivity: Act
private fun createIntent(activityClass: Class<out Activity?>) = Intent(currentActivity, activityClass).apply {
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
}
}
}
Expand Up @@ -76,10 +76,10 @@ class SearchByCodeFragment : NavigationBaseFragment() {

companion object {
const val INTENT_KEY_BARCODE = "barcode"
fun newInstance(barcode: String) = SearchByCodeFragment().apply {
fun newInstance(barcode: String? = null) = SearchByCodeFragment().apply {
arguments = Bundle().apply {
putString(INTENT_KEY_BARCODE, barcode)
}
}
}
}
}

0 comments on commit 97624bd

Please sign in to comment.