Skip to content

Instantly share code, notes, and snippets.

@harry-private
Last active February 23, 2021 16:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save harry-private/9f2ebd830fbe17deefca691e222fb591 to your computer and use it in GitHub Desktop.
Save harry-private/9f2ebd830fbe17deefca691e222fb591 to your computer and use it in GitHub Desktop.
How can I customize the addToBackStack behavior, when not using navigation, but using supportFragmentManager.beginTransaction()
package com.example.fragment
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import com.example.fragment.databinding.ActivityMainBinding
enum class FragmentName {
HOME, PROFILE, ABOUT
}
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var currentFragment: FragmentName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.root
val homeFragment = HomeFragment()
val profileFragment = ProfileFragment()
val aboutFragment = AboutFragment()
currentFragment = FragmentName.HOME
changeFragment(homeFragment, false)
binding.home.setOnClickListener {
if (currentFragment != FragmentName.HOME) changeFragment(homeFragment)
currentFragment = FragmentName.HOME
}
binding.profile.setOnClickListener {
var addToBackStack = currentFragment != FragmentName.PROFILE
if (currentFragment != FragmentName.PROFILE) changeFragment(profileFragment)
currentFragment = FragmentName.PROFILE
}
binding.about.setOnClickListener {
var addToBackStack = currentFragment != FragmentName.ABOUT
if (currentFragment != FragmentName.ABOUT) changeFragment(aboutFragment)
currentFragment = FragmentName.ABOUT
}
}
private fun changeFragment(fragment: Fragment, addToBackStack: Boolean = true) {
supportFragmentManager.beginTransaction().apply {
replace(R.id.flFragment, fragment)
if (addToBackStack) {
addToBackStack(null)
}
commit()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment