开发者

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

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center. Closed 11 years ago.

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(MyActivit开发者_运维问答y.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:

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

SOLUTION:

Had to add this to the style:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜