I am working on a project and I need to be able to use the back button in each fragment to navigate between previous fragments, I have methods written to do so by using a back arrow in the action bar, however, I want to be able to use the same functionality on the back button pressed. I don't want to use the back stack. Is there a way to do this?
EDIT
Rather than using the back stack I want to be able to call the go back to previous method below when the user clicks the back button. I need to used the gobackpressed method within fragments. Is this possible? I hope this is clear and concise. Apologies for any confusion caused above.
Go Back to Previous
public void gobackToPreviousFragment(String preFragmentTag, Fragment preFragment){ FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.animator.close_slide_in,R.animator.close_slide_out); ft.show(preFragment); //**BY REMOVING FRAGMENT, WHEN USER TRIES TO REVISIT, FRAGMENT IS BLACK** ft.remove(fm.findFragmentByTag(Misc.currentContentFragmentTag)); ft.addToBackStack(null); ft.commit(); Misc.currentContentFragmentTag = preFragmentTag; createBar(preFragment); }
Go Forward
public void gotoNextFragment(String nextTag, Fragment nextFragment){ FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.animator.enter_slide_in, R.animator.enter_slide_out); boolean newlyCreated = false; if(nextFragment == null){ nextFragment = Fragment.instantiate(this, nextTag); newlyCreated = true; } //hide current fragment ft.hide(fm.findFragmentByTag(Misc.currentContentFragmentTag)); if(newlyCreated){ ft.add(R.id.content_frame, nextFragment, nextTag); } else{ ft.show(nextFragment); } ft.addToBackStack(null); ft.commit(); Misc.currentContentFragmentTag = nextTag; createBar(nextFragment); }
These are how I navigate back and forth, and I'd like to be able to implement the go back method on the onBackPressed(). Does this make sense?
In order to check when the 'BACK' button is pressed, use onBackPressed() method from the Android library. Next, perform a check to see if the 'BACK' button is pressed again within 2 seconds and will close the app if it is so. Otherwise, don't exit.
Here is the new way you can manage your onBackPressed() in fragment with the new call back of activity: // Disable onBack click requireActivity(). onBackPressedDispatcher. addCallback(this) { // With blank your fragment BackPressed will be disabled. }
I didn't find any good answer about this problem, so this is my solution.
If you want to get backPress in each fragment do the following.
create interface OnBackPressedListener
public interface OnBackPressedListener { void onBackPressed(); }
That each fragment that wants to be informed of backPress
implements this interface.
In parent activity , you can override onBackPressed()
@Override public void onBackPressed() { List<Fragment> fragmentList = getSupportFragmentManager().getFragments(); if (fragmentList != null) { //TODO: Perform your logic to pass back press here for(Fragment fragment : fragmentList){ if(fragment instanceof OnBackPressedListener){ ((OnBackPressedListener)fragment).onBackPressed(); } } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With