Skip to main content

java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layout


Within the last days I do see increasing error messages that sound identical. I don't use tablets ActionBar - I'm developing for phones only.



What's the reason for these crashes?



Here's a complete trace:




java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=8995, result=0, data=null} to activity {xy.yyyy.app.android/xy.yyyy.app.Main}: java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layout
at android.app.ActivityThread.deliverResults(ActivityThread.java:2818)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:2861)
at android.app.ActivityThread.access$1000(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layout
at com.android.internal.app.ActionBarImpl.init(ActionBarImpl.java:214)
at com.android.internal.app.ActionBarImpl.<init>(ActionBarImpl.java:200)
at android.app.Dialog.show(Dialog.java:255)
at xy.yyyy.app.MyProgressDialog.show(MyProgressDialog.java:33)
at xy.yyyy.app.MyProgressDialog.show(MyProgressDialog.java:23)
at xy.yyyy.app.Main$FetchTask.onPreExecute(Main.java:19)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:549)
at android.os.AsyncTask.execute(AsyncTask.java:499)
at xy.yyyy.app.Main.onActivityResult(Main.java:60)
at android.app.Activity.dispatchActivityResult(Activity.java:4581)
at android.app.ActivityThread.deliverResults(ActivityThread.java:2814)
... 11 more



This is a typical AsyncTask that I use from within an activity to start a lengthy task with a ProgressDialog:




private class DeleteTask extends AsyncTask<Void, Void, Boolean> {

@Override
protected void onPreExecute () {
if (!isRunning) {
progressDialog = MyProgressDialog.show(MyActivity.this,
null,
null,
true,
false);
}
}

@Override
protected Boolean doInBackground(final Void... strings) {
Boolean rc = false;

if (!isRunning) {
isRunning = true;

processDelete();
}

return rc;
}

@Override
protected void onPostExecute(final Boolean result) {
if (progressDialog != null) {
progressDialog.cancel();
}
progressDialog = null;

setResult(RESULT_OK);
finish();

isRunning = false;
}
}



Here's my MyProgressDialog class:




public class MyProgressDialog extends Dialog {

public MyProgressDialog(final Context context) {
super(context, R.style.MyProgressDialog);
}

public static MyProgressDialog show(final Context context, final CharSequence title, final CharSequence message) {
return show(context, title, message, false);
}

public static MyProgressDialog show(final Context context, final CharSequence title, final CharSequence message, final boolean indeterminate) {
return show(context, title, message, indeterminate, false, null);
}

public static MyProgressDialog show(final Context context, final CharSequence title, final CharSequence message, final boolean indeterminate, final boolean cancelable) {
return show(context, title, message, indeterminate, cancelable, null);
}

public static MyProgressDialog show(final Context context, final CharSequence title, final CharSequence message, final boolean indeterminate, final boolean cancelable, final OnCancelListener onCancelListener) {
MyProgressDialog dialog = new MyProgressDialog(context);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(onCancelListener);
dialog.setTitle(title);

dialog.addContentView(new ProgressBar(context), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
dialog.show();

return dialog;
}
}



Many thanks in advance.



EDIT:



Here's the used style:




<style name="MyProgressDialog">
<item name="android:background">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowTitleStyle">@null</item>
</style>



Here's a screenshot of that ProgressDialog:



enter image description here



SOLUTION:



Had to add this to the style:




parent="@android:style/Theme.Dialog"


Source: Tips4allCCNA FINAL EXAM

Comments

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.