Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using onBackPressed() in Android Fragments

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?

like image 641
DJ-DOO Avatar asked Aug 12 '13 14:08

DJ-DOO


People also ask

How do I use onBackPressed?

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.

How do I disable back press in fragment?

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. }


1 Answers

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();            }         }     } } 
like image 147
Ioane Sharvadze Avatar answered Oct 07 '22 09:10

Ioane Sharvadze