Commit 5eb6545b authored by Thomas's avatar Thomas
Browse files

Fix state loss

parent 7f003eeb
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -966,30 +966,41 @@ public class Helper {
                                       @Nullable Bundle args,
                                       @Nullable String tag,
                                       @Nullable String backStackName) {
        // Check if FragmentManager is in a valid state
        if (fragmentManager.isDestroyed() || fragmentManager.isStateSaved()) {
            return fragment;
        }

        Fragment _fragment = fragmentManager.findFragmentByTag(tag);
        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
        Fragment _fragment = fragmentManager.findFragmentByTag(tag);

        if (_fragment != null && _fragment.isAdded()) {
            ft.show(_fragment).commitAllowingStateLoss();
            fragment = _fragment;
            // Reuse existing fragment
            ft.show(_fragment);
            try {
                ft.commit();
            } catch (IllegalStateException e) {
                // State already saved, cannot commit
                return _fragment;
            }
            return _fragment;
        } else {
            // Add new fragment
            if (args != null) fragment.setArguments(args);
            ft = fragmentManager.beginTransaction();
            ft.add(containerViewId, fragment, tag);
            if (backStackName != null) {
                try {
                ft.addToBackStack(backStackName);
                }catch (Exception ignored){}
            }
            if (!fragmentManager.isDestroyed()) {
                ft.commitAllowingStateLoss();
            }
            }
        if(!fragmentManager.isDestroyed()) {
            fragmentManager.executePendingTransactions();
            try {
                ft.commit();
            } catch (IllegalStateException e) {
                // State already saved, cannot commit
                return fragment;
            }
            return fragment;
        }
    }

    /**
     * Load a media into a view