Skip to content Skip to sidebar Skip to footer

Prevent The Same Fragment To Be Added Multiple Times In PopBackStack

My activity is composed of 3 nested Fragments. There is my MainFragment that is displayed by default, ProductFragment that can be called from it, then DetailFragment can be called

Solution 1:

Use fragment's method isAdded() to evaluate the insertion. For example:

if(!frag.isAdded()){
   //do fragment transaction and add frag
}

Solution 2:

Here is my solution. Maybe dirty but it works. I implemented a method that returns the tag of the fragment that is displayed before clicking the on back button :

public String getActiveFragment() {

    if (getFragmentManager().getBackStackEntryCount() == 0) {
        return null;
    }

    String tag = getFragmentManager()
        .getBackStackEntryAt(getFragmentManager()
        .getBackStackEntryCount() - 1)
        .getName();

    return tag;
}

Then, on my onBackPressed() method :

    // Get current Fragment tag
    String currentFrag = getActiveFragment();

    if(currentFrag.equals("PRODUCT_TAG")) {

        // New transaction to first Fragment
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.setCustomAnimations(R.animator.enter_from_right, R.animator.exit_to_left, R.animator.enter_from_right, R.animator.exit_to_left);
        ft.replace(R.id.container, new SearchFragment(), "MAIN_TAG");
        ft.commit();

    } else {

        // Go to Fragment-1
        getFragmentManager().popBackStack();
    }

Solution 3:

Here is my handy and simple solution to check for duplicate insertion through fragment manager

at first, I check if it is first time intention for adding fragment and then I check if the fragment is presented using fragment manager

  Fragment fragment = getSupportFragmentManager().findFragmentByTag("firstFragment");
                if (fragment == null) {
                    getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, new FirstFragment(), "firstFragment")
                            .addToBackStack(null)
                            .commit();
                }else if(!fragment.isAdded()){
                    getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, new FirstFragment(), "firstFragment")
                            .addToBackStack(null)
                            .commit();
                }

Solution 4:

Here is my solution:

Fragment curFragment = fragmentManager.findFragmentById(R.id.frameLayout);
if(curFragment != null
    && curFragment.getClass().equals(fragment.getClass())) return;

// add the fragment to BackStack here

Xamarin.Android (C#) version:

var curFragment = fragmentManager.FindFragmentById(Resource.Id.frameLayout);    
if (curFragment != null
    && curFragment.GetType().Name == fragment.GetType().Name) return;

// add the fragment to BackStack here

Post a Comment for "Prevent The Same Fragment To Be Added Multiple Times In PopBackStack"