0

I'm trying to popBackStack on childFragmentManager if a childFragment is added but when I check if getChildFragmentManager.getBackStackEntryCount() is > 0, it's always false. Any suggestions on this isue?

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() < 2) {
        this.finishAffinity();
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(1);
    } else {
        FragmentManager fm = getSupportFragmentManager();
        for (Fragment frag : fm.getFragments()) {
            FragmentManager childFm = frag.getChildFragmentManager();
            Log.i("RAZZZVI", "Number " + childFm.getBackStackEntryCount());
            if (childFm.getBackStackEntryCount() > 0) {
                childFm.popBackStackImmediate();
                return;

            } else {
                getSupportFragmentManager().popBackStackImmediate();
            }
        }
    }
}

And this is how I add the fragments

layout_chart1.setOnClickListener {
            child_fragment_container.visibility = View.VISIBLE
            val transaction = childFragmentManager.beginTransaction()
            transaction.addToBackStack(null)
                    .setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_right)
                    .add(R.id.child_fragment_container, PieChartDetails(chartsViewModel), "STATUS_DETAILS")
                    .commit()
        }

        layout_chart2.setOnClickListener {
            child_fragment_container.visibility = View.VISIBLE
            val transaction = childFragmentManager.beginTransaction()
            transaction.addToBackStack(null)
                    .setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_right)
                    .add(R.id.child_fragment_container, BarChartDetails(chartsViewModel))
                    .commit()
        }
Razvan Andrei
  • 39
  • 1
  • 7

1 Answers1

2

getBackStackEntryCount() is 0 because you have not added any Fragment transactions to the FragmentManager's back stack.

Note that each FragmentManager has its own backstack (so a Fragment's child FragmentManager stack would be different from the containing Activity's fragment backstack), and it is also distinct from the application's Activity back stack.

If you were to add your transaction to the back stack like so, it would return 1:

fragmentManager.beginTransaction()
        .replace(R.id.frame_layout, stepsFragment)
        .addToBackStack(null)
        .commit();