I am in the process of making a honeycomb project/fork backwards compatible with 1.6+.
Based on the documentation provided by Google/Android I decided to build off all my fragments off DialogFragment
s which worked great for honeycomb...it gives me the flexibility to put anything as a dialog or 'full screen' element.
I've now incorporated the compatibility kit and moved my imports and method calls over to that. Now that I'm on 2.3 I am trying to launch an identical intent but I receive this issue:
java.lang.IllegalStateException: DialogFragment can not be attached to a container view
The documentation for DialogFragment
suggests that it can perform as Fragment
when you don't desire the dialog/popup functionality.
Did you check the application note? It shows a recommended way of embedding a dialog, and I've verified this works on 2.2.1.
http://developer.android.com/reference/android/app/DialogFragment.html#DialogOrEmbed
My fragment layout had to change to conform but it was quick and easy. It's more natural to be able to define the dialog fragment in XML and expect it to be embedded without any extra work (as the above changes to Compat API would support); and to only expect modal behavior when called through show(). I suppose that isn't the current behavior.
You can use the android.support.v4.app.DialogFragment version, please check here
I've had the same problem. I never found a "correct" solution, but you can do the same thing by setting the theme of the Dialog in
OnCreateDialog()
. By setting the theme toandroid.R.style.Theme_Holo_DialogWhenLarge
the dialog will be shown as a dialog on large and xlarge screens, while it'll be shown as a full screen window on small and normal screens.I managed to fix this properly in
DialogFragment.java
of the Compatibility Package:Change line 74:
boolean mShowsDialog = false;
Comment out line 232:
//mShowsDialog = mContainerId == 0;
Then change the two show methods to this:
Basically, they did write in support but the toggle to switch between dialog/embedded doesn't work.
So here we default to embedded, and then set to show as a dialog just before we show it.
I am using a DialogFragment child class and doing this trick in the onCreate() works. I call setShowsDialog() before onCreate() is called (in the onAttachFragment() of my Activity)