Search code examples
androidandroid-layoutandroid-activityandroid-fragmentsfragmenttransaction

FragmentTransaction add() behavior


Working with fragments I've always used replace() for my transactions, but I wish I didn't have to save instance states anymore to restore a fragment's view and prevent reloading when coming back to that fragment. So, I've decided to work with add(). The thing is when I add another fragment, the previous fragment view remains in the background and that's fine (that's the behavior I expected), but the problem is I can actually interact with the views in the background. Example:

Fragment A has a Button

Fragment B has a TextView

When I add Fragment A and later add Fragment B, I'm able to click on Fragment A's Button, even staying on Fragment B's view.

I'm using:

FragmentTransaction fragmentTransaction = 
            getSupportFragmentManager().beginTransaction().
            add(getRootViewContainer(),fragment,fragment.getClass().getSimpleName());

if (shouldGoBack) 
    fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName());

where getRootViewContainer() returns the id of the FrameLayout I'm using as my activity main container.

Now, is it really the default behavior of add()?

If so, is there a proper way to avoid this or one just has to use replace()?


Solution

  • FragmentTransaction.hide(fragmentBehind); //works for me!
    

    example :

    //I have it globally available
    FragmentTransaction trans = MainActivity.getManager().beginTransaction(); 
    
    //not globally 
    FragmentTransaction trans = getFragmentManager().beginTransaction();
    MapFragment newFragment = new newFragment();
    trans.add(R.id.fragmentContainer, newFragment, tag);
    trans.hide(this);
    trans.addToBackStack(tag);
    trans.commit();