web-dev-qa-db-fra.com

requestFeature () doit être appelé avant d'ajouter une erreur de contenu sur super.onCreate

J'ai une classe abstraite étendant ActionBarActivity. Dans le onCreate, j'ai:

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

L'application se bloque en raison de requestFeature () avant l'erreur de contenu, en particulier sur la ligne super.onCreate(savedInstanceState). Après avoir lu certains des articles similaires, j'ai trouvé cette solution:

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

Ma question est: pourquoi ça plante sur le super appel? De plus, je ne suis pas settingContentView dans les classes qui étendent cette classe jusqu'à APRÈS avoir appelé super.onCreate. Il plante encore occasionnellement.

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

Car Android.support.v7.app.ActionBarActivity modifie le contenu de la fenêtre en ajoutant un ActionBar.
Veuillez consulter le code commençant par

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

et sur https://Android.googlesource.com/platform/frameworks/support/+/master/v7/appcompat/src/Android/support/v7/app/ActionBarActivity.Java pour plus de détails.
Et ce que le FEATURE_INDETERMINATE_PROGRESS ressemble dépend de la présence ou non d'un ActionBar. Donc, cela doit être réglé avant le super appel.

23
yanchenko