Android. Define a fragment in a container

Question:

How to determine which fragment is currently shown in the container?

If you do this:

if (fragmentmanager.findFragmentByTag(fragment.TAG) != null) {}

Then the answer will always be True if we have added this fragment to the stack at least once, even if the fragment has already been replaced by another. And it will be True until we call remove on this fragment.

Answer:

You can use your own fragment manager like:

class SimpleFragmentManager  {
        private FragmentManager fragmentManager;
        private Stack<Fragment> fragmentStack;

        public SimpleFragmentManager(Activity activity) {
            fragmentManager=activity.getSupportFragmentManager();
            fragmentStack=new Stack<>();
        }

        public void push(int fragmentContainer, Fragment fragment, String id) {
            fragmentManager.beginTransaction().replace(fragmentContainer, fragment).addToBackStack(id).commit();
            fragmentStack.push(fragment);
        }

        public void reset(int fragmentContainer, Fragment fragment) {
            fragmentManager.beginTransaction().replace(fragmentContainer, fragment).commit();
            fragmentStack.empty();
            fragmentStack.push(fragment);
        }

        public Fragment pop() {
            fragmentManager.popBackStack();
            return fragmentStack.pop();
        }

        public Fragment peek() {
            return fragmentStack.peek();
        }

        public int size() {
            return fragmentManager.getBackStackEntryCount();
        }

        public void addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener) {
            fragmentManager.addOnBackStackChangedListener(listener);
        }
    }

Then the current fragment can always be obtained through peek()

Scroll to Top