web-dev-qa-db-ja.com

super.onCreateにコンテンツエラーを追加する前にrequestFeature()を呼び出す必要があります

ActionBarActivityを拡張する抽象クラスがあります。 onCreateには、次のものが含まれています。

_@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    ...
}
_

コンテンツエラーの前のrequestFeature()が原因で、特にsuper.onCreate(savedInstanceState)の行でアプリがクラッシュします。同様の投稿をいくつか読んだ後、私はこの解決策を思いつきました:

_@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    super.onCreate(savedInstanceState);
    ...
}
_

私の質問は、スーパーコールでクラッシュするのはなぜですか?また、_super.onCreate_を呼び出した後まで、このクラスを拡張するクラスではsettingContentViewではありません。それでも時々クラッシュしています。

_Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.cycle.Cycle}: Android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2351)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$600(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1331)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:155)
at Android.app.ActivityThread.main(ActivityThread.Java:5454)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:511)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1029)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:796)
at dalvik.system.NativeStart.main(Native Method)

Caused by: Android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at com.Android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.Java:320)
at Android.app.Activity.requestWindowFeature(Activity.Java:3283)
at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:63)
at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:98)
at com.myapp.core.activity.MyActivity.onCreate(MyActivity.Java:83)
at com.myapp.cycle.Cycle.onCreate(Cycle.Java:55)
at Android.app.Activity.performCreate(Activity.Java:5066)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1101)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2307)
... 11 more
_
28
ono

Android.support.v7.app.ActionBarActivity ActionBarを追加してウィンドウの内容を変更します。
で始まるコードをご覧ください

@Override
protected void onCreate(Bundle savedInstanceState) {
    mImpl = ActionBarActivityDelegate.createDelegate(this);
    super.onCreate(savedInstanceState);
    mImpl.onCreate(savedInstanceState);
}

詳細は https://Android.googlesource.com/platform/frameworks/support/+/master/v7/appcompat/src/Android/support/v7/app/ActionBarActivity.Java をご覧ください。
そしてFEATURE_INDETERMINATE_PROGRESSは、ActionBarが存在するかどうかによって異なります。したがって、スーパーコールの前に設定する必要があります。

23
yanchenko