When using nested fragments, we do not want each internal fragment replacement to go into the external most of the activity. A mechanism that allows a fragment to notify its parent that it wants to switch to another fragment may be useful.
Here is my Kotlin code, I think it is easy to translate to Java.
interface FragmentNavigator { fun navigateTo(fragment: Fragment) } class NavigableFragment: Fragment() { var navigator: FragmentNavigator? = null override fun onDetach() { super.onDetach() navigator = null } }
Inner fragments must extend NavigableFragment and use the following code to change themselves to another fragment.
navigator?.navigateTo(anotherFragment)
External actions or fragments must implement the FragmentNavigator and override navigateTo .
override fun navigateTo(fragment: Fragment) { supportFragmentManager.beginTransaction().replace(view_id, fragment).commit() }
Finally, in external actions or fragments, override onAttachFragment
override fun onAttachFragment(fragment: Fragment?) { super.onAttachFragment(fragment) if(fragment is NavigableFragment) { fragment.navigator = this } }
Jeffrey Chen May 6 '19 at 19:26 2019-05-06 19:26
source share