0

I have a FragmentActivity and this class is subclassed into various activities that I am displaying on various tabs and the user can switch between these tabs. I have a service running as well. In pause state my application continues to work and if it is connected to a ble device it shows a dialog. Not I get the error IllegalStateException. when the fragmentActitiity class is calling the class the extends the DialogFragment.

** IS there a way to handle the dialogfragment on pause state and make it not show the dialog when the device is in pause state? If so should it be done in FragementActivities's pause or in the base fragement's onPause ***

I am showing the dialog as

             protected void showDialog(int id, String title, String message) {
             MyDialog confirmationDialog = MyDialog .newInstance(id,
            title, message);
              confirmationDialog.show(this.getFragmentManager(), null);
             }

and the Dialog class is as follows

        MyDialog extends DialogFragment implements OnClickListener{

      private int id = -1;

private String mDialogtitle;

private String mDialogMessage;

public static MyDialog newInstance(int id, String dialogTitle, String dialogMessage) {

    MyDialog mDialog = new MyDialog();
    Bundle bundle = new Bundle();
    bundle.putString(MyApplication.getAppContext().getString(R.string.message), dialogMessage);
    bundle.putString(MyApplication.getAppContext().getString(R.string.title), dialogTitle);
    bundle.putInt(MyApplication.getAppContext().getString(R.string.dialogid), id);
    mDialog .setArguments(bundle);

    return mDialog ;
}

public AlertDialog onCreateDialog(Bundle savedInstanceState) {

    mDialogtitle = getArguments().getString(getString(R.string.title));

    mDialogMessage = getArguments().getString(getString(R.string.message));

    id = getArguments().getInt(getString(R.string.dialogid));

    switch (id) {

    case DialogConstants.GENERAL_DIALOG_WITH_OK:
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(mDialogtitle);
        builder.setMessage(mDialogMessage)
        .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dismiss();
            }
        });
        return builder.create();

            default:
        return null;
    }
}

@Override
public void onClick(View v) {

}

}

EDIT: Logs 04-06 11:26:42.747: E/AndroidRuntime(16092): FATAL EXCEPTION: main

04-06 11:26:42.747: E/AndroidRuntime(16092): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1323) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1341) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.app.BackStackRecord.commit(BackStackRecord.java:575) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.app.DialogFragment.show(DialogFragment.java:230) 04-06 11:26:42.747: E/AndroidRuntime(16092): at MyFragementActivity.showDialog(MyFragementActivity.java:593) 04-06 11:26:42.747: E/AndroidRuntime(16092): at MySubClass $5.handleMessage(MySubClass.java:1974) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.os.Handler.dispatchMessage(Handler.java:102) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.os.Looper.loop(Looper.java:146) 04-06 11:26:42.747: E/AndroidRuntime(16092): at android.app.ActivityThread.main(ActivityThread.java:5635) 04-06 11:26:42.747: E/AndroidRuntime(16092): at java.lang.reflect.Method.invokeNative(Native Method) 04-06 11:26:42.747: E/AndroidRuntime(16092): at java.lang.reflect.Method.invoke(Method.java:515) 04-06 11:26:42.747: E/AndroidRuntime(16092): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 04-06 11:26:42.747: E/AndroidRuntime(16092): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 04-06 11:26:42.747: E/AndroidRuntime(16092): at dalvik.system.NativeStart.main(Native Method)

EDIT: call from the base activity

   showDialog("OK",
                        getString(R.string.app_name),
                        "Device Connected.");
JourneyWithAndroid
  • 250
  • 2
  • 5
  • 19

0 Answers0