Using onBackPressed() in Android Fragments

android, fragment

Solution

Why don't you want to use the back stack? If there is an underlying problem or confusion maybe we can clear it up for you.

If you want to stick with your requirement just override your Activity's onBackPressed() method and call whatever method you're calling when the back arrow in your ActionBar gets clicked.

EDIT: How to solve the "black screen" fragment back stack problem:

You can get around that issue by adding a backstack listener to the fragment manager. That listener checks if the fragment back stack is empty and finishes the Activity accordingly:

You can set that listener in your Activity's onCreate method:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FragmentManager fm = getFragmentManager();
    fm.addOnBackStackChangedListener(new OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            if(getFragmentManager().getBackStackEntryCount() == 0) finish();
        }
    });
}

Problem

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?

Original source

Related problems