title: Showing a DialogFragment throws "Can not perform this action after onSaveInstanceState" error
body: <h1>Problem</h1>
  
  <p>Hi, I'm creating an Android and iOS module for Titanium which has a sendLog method which sends some arbitrary JSON data to a server and returns an URL if it matches some predefined filters. The URL should be opened in a modal Dialog with a webview.</p>
  
  <p>I've written native iOS and Android libraries and wrapped them as Titanium modules. On iOS everything works fine but on Android I can't open the Dialog (see error stack trace below). Right now there's one log message that always triggers the same webpage for testing purposes. On Android it just fails silently.</p>
  
  <h1>Test case</h1>
  
  <pre><code>var mupets = require("be.iminds.mupets");
  mupets.initialize("wappr", "http://tocker.iminds.be:3000/log/report.json", 1, 100, 3);
  var esmLog = { 
      bar: "foo"
  };
  mupets.sendLog("es-test-01",JSON.stringify(esmLog));
  </code></pre>
  
  <p>After this piece of code (after about 10 seconds max), the module should show a native dialog with the following webpage inside: <a href="http://tocker.iminds.be:3000/es/sheets/test-01/index.html" rel="nofollow">http://tocker.iminds.be:3000/es/sheets/test-01/index.html</a></p>
  
  <p>Instead, this is the error I get consistently:</p>
  
  <h1>Logs</h1>
  
  <pre><code>java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
  at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1411)
  at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1429)
  at android.app.BackStackRecord.commitInternal(BackStackRecord.java:687)
  at android.app.BackStackRecord.commit(BackStackRecord.java:663)
  at android.app.DialogFragment.show(DialogFragment.java:256)
  at be.iminds.mupets_client_android.logging.plugins.OutHttp.getEsm(OutHttp.java:122)
  at be.iminds.mupets_client_android.logging.plugins.OutHttp$1.success(OutHttp.java:78)
  at be.iminds.mupets_client_android.HttpClient$1$1.onResponse(HttpClient.java:76)
  at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
  at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)
  </code></pre>
  
  <p>Here is the Android code that's causing the error:</p>
  
  <pre><code>Activity activity = (Activity) context;
                  EsmDialogFragment esmDialogFragment = EsmDialogFragment.newInstance(new EsmDialogListener() {
                      @Override
                      public void submit(String type, JsonObject result) {
                          Mupets.sendLog(type, result);
                          esmShown = false;
                      }
  
                      @Override
                      public void onCancel(JsonObject cancelled) {
                          super.onCancel(cancelled);
                          Mupets.sendLog("ESM_cancelled", cancelled);
                          esmShown = false;
                      }
                  }, url, true);
                  FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
                  Fragment prev = activity.getFragmentManager().findFragmentByTag(EsmDialogFragment.ESM_DIALOG_FRAGMENT);
                  if (prev != null) {
                      transaction.remove(prev);
                  }
                  transaction.addToBackStack(null);
                  Log.v(TAG, "Pre-show fragment");
                  esmDialogFragment.show(transaction, EsmDialogFragment.ESM_DIALOG_FRAGMENT);
                  Log.v(TAG, "Post-show fragment");
  </code></pre>
  
  <p>Does Titanium either not allow the use of Fragments/or require you to call Dialog.show() at a specific point? The error talks about "...after onSaveInstanceState" but I don't see how I would call it before onSaveInstanceState if I'm not creating an activity and why the code works when I use it in a native Android app.</p>
  
  <p>This is an Titanium example project with the module that should show the dialog after it opens:
  <a href="https://www.dropbox.com/s/0v77xd5gllv6kb3/testModule.zip?dl=1" rel="nofollow">https://www.dropbox.com/s/0v77xd5gllv6kb3/testModule.zip?dl=1</a></p>