1

I have 2 Activites A & B, In Activity A I managed fragment back stack but in one case as like below: I have 4 fragments in Activity going from fragment 1 to 2 to 3 to 4 then from 4th fragment I'm going to Activity B now what i want is on press of back button fragment 4 of Activity should be opened and then on back fragment 3 and so on.

I'm using following function to replace the fragment and manage back stack

  private void changeFragment(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    fragmentManager.beginTransaction().replace(R.id.act_home_fl_container, fragment).commit();
}

On back press

 boolean isPopFragment = getSupportFragmentManager().getBackStackEntryCount() > 0 ? true : false;
    if (isPopFragment) {
        getSupportFragmentManager().popBackStack();
    }

I got success upto here but when I'm going to Activity B from 4th fragment and coming back to Activity A, I'm not able to manage back stack of fragments of Activity A.

I'm not having any how to start with it.

Rajesh Panchal
  • 1,140
  • 3
  • 20
  • 39
  • You have to maintain two stacks for two activities. Although you can manage the fragments in same activity. I suggest you to look at this github project. [https://github.com/JetradarMobile/multibackstack] .These guys made a very good implementation. – Paresh P. Dec 12 '16 at 09:53
  • @Rajesh Have you got the solution..if yes please guide me on the same – SRam Apr 18 '18 at 10:06

3 Answers3

0

you can override onBackPressed inside your activities, check which fragment is on top and decide what to do as you wish:

@Override
public void onBackPressed()
{
     // code here
     super.onBackPressed();  // check if you need this, depends on your needs
}
Nir Duan
  • 6,164
  • 4
  • 24
  • 38
0

Use this code to change fragment

public static void addFragment( final Fragment newFragment, final Fragment hideFragment) {
    final FragmentManager fragmentManager = getFragmentManager();
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.hide(hideFragment);
    fragmentTransaction.add(R.id.activity_home_container, newFragment, newFragment.getClass().getSimpleName());
    fragmentTransaction.addToBackStack(hideFragment.getClass().getSimpleName());
    fragmentTransaction.commitAllowingStateLoss();
}

newFragment "Fragment you want to add"
hideFragment "Fragment which is on container"

Rishabh Mahatha
  • 1,251
  • 9
  • 19
0

just use addToBackStack(tag_name) before commit

You can add en extension function in kotlin

fun AppCompatActivity.replaceFragment(containerId: Int, fragment: Fragment) =

      supportFragmentManager.beginTransaction()
                            .replace(containerId, fragment, fragment.javaClass.name)
                            .addToBackStack(fragment.javaClass.name).commit()
   
Amir Raza
  • 2,320
  • 1
  • 23
  • 32