import android.app.Activity; import android.app.FragmentTransaction; import android.os.Bundle; import java.util.LinkedList; public class BaseFragmentActivity extends Activity { private LinkedList<FragmentTransaction> mFragmentTransactions; private boolean mIsTransactionAllowed; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mFragmentTransactions = new LinkedList<>(); } @Override protected void onStop() { disableFragmentTransaction(); super.onStop(); } @Override protected void onSaveInstanceState(Bundle outState) { disableFragmentTransaction(); super.onSaveInstanceState(outState); } @Override protected void onDestroy() { clearFragmentTransaction(); super.onDestroy(); } @Override protected void onPostResume() { super.onPostResume(); allowFragmentTransaction(); commitPendingFragmentTransactions(); } private void disableFragmentTransaction() { mIsTransactionAllowed = false; } private void clearFragmentTransaction() { mFragmentTransactions.clear(); } private void allowFragmentTransaction() { mIsTransactionAllowed = true; } private void commitPendingFragmentTransactions() { while (!mFragmentTransactions.isEmpty()) { FragmentTransaction fragmentTransaction = mFragmentTransactions.removeFirst(); fragmentTransaction.commit(); } } protected boolean commit(FragmentTransaction fragmentTransaction) { if (mIsTransactionAllowed) { fragmentTransaction.commit(); } else { mFragmentTransactions.addLast(fragmentTransaction); } return true; } }