Android button back will move to a specific fragment

I have a navigation box menu structure that is currently set up to return to the previous fragmnet with addToBackStack when I select the back button:

    if (menuItem.getItemId() == R.id.nav_item_messages) {
            FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
            xfragmentTransaction.replace(R.id.containerView, new MessageTabFragment()).addToBackStack("MainActivity").commit();
        }

However, I want the Back button to always send the user back to a specific frame segment, and not just to the previous one.

How can I do that?

amendments

I tried to add the code:

int homeFragmentIdentifier = -1;

...

            if (menuItem.getItemId() == R.id.nav_item_messages) {
                FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                if(homeFragmentIdentifier == -1) {
                    homeFragmentIdentifier = xfragmentTransaction.replace(R.id.containerView, new MessageTabFragment()).commit();
                } else {
                    xfragmentTransaction.replace(R.id.containerView, new MessageTabFragment()).commit();
                }

            }

...

@Override
public void onBackPressed() {
    super.onBackPressed();

    getFragmentManager().popBackStack(homeFragmentIdentifier, 0);

}

But it just causes an error:

01-15 19:31:55.368 18410-18410/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.example.android.feastappv2, PID: 18410
                                                   java.lang.IllegalArgumentException: Bad id: -1
                                                       at android.app.FragmentManagerImpl.popBackStack(FragmentManager.java:526)
                                                       at com.example.android.feastappv2.feastapp.MainActivity.onBackPressed(MainActivity.java:143)
                                                       at android.app.Activity.onKeyUp(Activity.java:2667)
                                                       at android.view.KeyEvent.dispatch(KeyEvent.java:3214)
                                                       at android.app.Activity.dispatchKeyEvent(Activity.java:2922)
+4
source share
1 answer

Take a look at this: FragmentManager.popBackStack (int, int)

. int:

FragmentTransaction xfragmentTransaction = getFragmentManager().beingTransaction();
xfragmentTransaction.replace(R.id.containerView, new MessageTabFragment());
xfragmentTransaction.addToBackStack("MainActivity");
int homeFragmentIdentifier = transaction.commit();

onBackPressed() :

getFragmentManager().popBackStack(homeFragmentIdentifier, 0); // Exclusive

getFragmentManager().popBackStack("MainActivity", 0); // Exclusive

. , homeFragmentIdentifier "pop" ing, 0 FragmentManager.POP_BACK_STACK_INCLUSIVE . FragmentTransaction.addToBackStack(). :

public abstract int commit()... , addToBackStack (String). .

, , :

transaction.add(yourFragment);
transaction.addToBackStack("[YourFragmentTransactionTag]");

: FragmentManager.popBackStack(String, int), , .

getFragmentManager().popBackStack("[YourFragmentTransactionTag]", 0); 
+4

Source: https://habr.com/ru/post/1624375/


All Articles