Skip to main content

Why do some AlertDialogs disappear upon device rotation?



When I change device orientation, if AlertDialog was shown, it disappears. This is true for all but one dialogs in my app, and I can't figure out neither what's so special about the one that doesn't disappear nor how to counteract this behaviour. Any possibility to preserve dialogs upon orientation change (except for manual management)?




Comments

  1. As suggested by many people here,

    android:configChanges="keyboardHidden|orientation"


    is not a solution. It's a hack at best. The correct way to handle this is to manage dialogs through your activity. You need to override a few methods in your activity code, Like so:

    protected Dialog onCreateDialog(int id) {
    // create and return your dialog instance here
    AlertDialog dialog = new AlertDialog.Builder(context)
    .setTitle(title)
    .setIcon(R.drawable.indicator_input_error)
    .setMessage(message)
    .create();
    dialog.setButton(
    DialogInterface.BUTTON_POSITIVE,
    context.getString(R.string.OK),
    (DialogInterface.OnClickListener) null);
    return dialog;
    }

    protected void onPrepareDialog(int id, Dialog dialog) {
    // You dialog initialization code here
    }


    After you're done with this. You show your dialog using:

    showDialog(yourDialogID);


    Once you're done implementing this, your'll see that your dialog will also be recreated if configuration changes occur. The best part is that your Activity will manage your dialog for you. It will be reused when possible, reducing dialog load times if you perform heavy initialization.


    Note from Android SDK documentation:
    Using this attribute should be avoided and used only as a last-resort. Please read Handling Runtime Changes for more information about how to properly handle a restart due to a configuration change.

    ReplyDelete
  2. i think may be you have to take

    android:configChanges="keyboardHidden|orientation"


    in mainfest of your activity

    ReplyDelete
  3. Its becuase the activity is restarting when you rotate the device.

    If you add

    android:configChanges="keyboardHidden|orientation"


    Tag to each activity you dont want to restart on configuration change add the following tag.

    ReplyDelete
  4. Perhaps, you invoked setCancelable(true) on that dialog. But not sure if this could affect the dialog behavior.

    ReplyDelete
  5. I think probably Because OnCreate method is called upon orientation change and activity is again created so dialog disappears.

    ReplyDelete
  6. when you rotate your device it restarts your activity that's why your dialog get disappear to solve this problem just include following attributes in your android-manifest xml

    android:configChanges="keyboardHidden|orientation"

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.