Recibo este android.util.AndroidRuntimeException: requestFeature() must be called before adding content
error. Como puede ver en el siguiente código, la requestWindowFeature(Window.FEATURE_NO_TITLE);
línea viene antes de la setContentView(R.layout.mainmenu);
línea de código. Este código onCreate () tiene el mismo formato en casi todas mis actividades y nunca antes había tenido problemas con él hasta ahora. Desde que actualicé a ADT 22, han aparecido muchos errores aleatorios en todas partes. He eliminado muchos de esos errores y este es el último.
¿Qué puedo hacer para solucionar este error?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mainmenu);
LogCat
05-31 04:20:43.121: E/AndroidRuntime(14559): FATAL EXCEPTION: main
05-31 04:20:43.121: E/AndroidRuntime(14559): java.lang.RuntimeException: Unable to start activity ComponentInfo{matt.lyons.bibletrivia.lite/matt.lyons.bibletrivia.lite.MainMenu}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.os.Handler.dispatchMessage(Handler.java:99)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.os.Looper.loop(Looper.java:137)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-31 04:20:43.121: E/AndroidRuntime(14559): at java.lang.reflect.Method.invokeNative(Native Method)
05-31 04:20:43.121: E/AndroidRuntime(14559): at java.lang.reflect.Method.invoke(Method.java:511)
05-31 04:20:43.121: E/AndroidRuntime(14559): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-31 04:20:43.121: E/AndroidRuntime(14559): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-31 04:20:43.121: E/AndroidRuntime(14559): at dalvik.system.NativeStart.main(Native Method)
05-31 04:20:43.121: E/AndroidRuntime(14559): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559): at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:229)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.Activity.requestWindowFeature(Activity.java:3244)
05-31 04:20:43.121: E/AndroidRuntime(14559): at matt.lyons.bibletrivia.lite.MainMenu.onCreate(MainMenu.java:28)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.Activity.performCreate(Activity.java:5104)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-31 04:20:43.121: E/AndroidRuntime(14559): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-31 04:20:43.121: E/AndroidRuntime(14559): ... 11 more
Respuestas:
También enfrenté este problema, pero cuando llamo a la solicitud de ventana antes de llamar a super.onCreate () , el problema se resolvió, inténtelo también como ..
@Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.mainmenu); }
Espero que esto te ayudará...:)
Editado: para otras posibles soluciones para las nuevas versiones de Android
Ocultar la barra de estado en Android 4.0 y versiones inferiores
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
Las ventajas de utilizar un tema de actividad son las siguientes:
La versión de Android es inferior a Jellybean
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); }
Ocultar la barra de estado en Android 4.1 y superior
View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide();
Tenga en cuenta lo siguiente:
fuente
requestWindowFeature
antessuper.onCreate
. No puede estar seguro del estado de la actividad antes de ese punto.Obtuve esa excepción (
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
) al usaren un dispositivo anterior con Android 2.3.5 (Gingerbread). Estoy usando la biblioteca de soporte v7.
El error se solucionó cuando lo cambié para usar:
(Esto también viene después de mi llamada de super.onCreate en la solución). Consulte los documentos en https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportRequestWindowFeature(int)
Por lo tanto, puede ser más un caso de mensaje de error engañoso que cualquier otra cosa.
fuente
appCompat
y también mesupportRequestWindowFeature
hizo el truco y no tuve que ponerlo antessuper.onCreate
Compruebe que su clase se extienda desde Activity o ActionBarActivity. Si está utilizando ActionBarActivity, utilice Activity.
fuente
Si está utilizando su actividad como un diálogo (con Theme.Dialog), asegúrese de extender Activity en lugar de ActionBarActivity (el valor predeterminado que se le proporciona con el asistente de Android Studio). Entonces puedes usar
o
DESPUÉS del
super.onCreate()
...fuente
También encontré este error desde un flujo de trabajo diferente. Creé una clase DialogFragment personalizada y creé dos
@Override
funciones: onCreateView y onCreateDialog. Mi función onCreateView tomó un diseño personalizado para el fragmento, y mi función onCreateDialog creó un AlertDialog.Builder.Esto pareció no funcionar porque onCreateDialog se llama antes que onCreateView. Después de eliminar onCreateView [al mover la inflación de mi vista personalizada a onCreateDialog, encontré el error:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Me di cuenta de que mi dificultad provenía de intentar implementar ambas anulaciones, ya que quería 1) usar un diseño para la vista principal del cuadro de diálogo y 2) usar los botones Positivo / Negativo predefinidos de Builder. Mi solución fue crear los botones positivos / negativos en mi vista de diálogo personalizada, así que eliminé mi implementación de la función Override onCreateDialog.
¡Espero que esto ayude a alguien en el futuro!
Aquí hay algunas preguntas SO que me ayudaron:
fuente
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowActionBar">false</item> </style>
solo configure el estilo como este, no se requiere ningún cambio de lado de codificación.
fuente
Estaba extendiendo un DialogFragment y la respuesta anterior no funcionó. Tuve que usar getDialog () para eliminar el título:
fuente
Extienda ( Actividad ) en lugar de ( ActionBarActivity )
ejemplo:
public class Itemdetails extends Activity {....
luego en el onCreate escribe:
super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.Your_Activity);
fuente
Creo que la forma más sencilla de hacer esto es usar el siguiente código
getActionBar().setTitle(null);
fuente
Pruebe las siguientes opciones, al menos una de ellas debería funcionar para usted:
Si está utilizando un DialogFragment, intente no anular ambos métodos
onCreateDialog(..)
yonCreateView(..)
(este cambio funcionó para mí)probar
supportRequestWindowFeature(Window.FEATURE_NO_TITLE)/requestWindowFeature(Window.FEATURE_NO_TITLE)
antessetContentView(..)
en la actividad y despuéssuper.onCreate(..);
Pruebe la opción 2 antes
super.onCreate(..);
fuente
Perdió su línea: super.onCreate (SavedInstanceState);
usa esta manera:
@Override protected void onCreate(Bundle savedInstanceState) { this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_qrscanner);
fuente
Tuve este error con
AlertDialog
y el error estaba ocurriendo en API 19 solo cuandodialog.show()
se llamó.Descubrí que la
android.app.AlertDialog
importación está causando el problema, así que lo cambié aandroidx.appcompat.app.AlertDialog
y lo solucionó.Tenga en cuenta que esto funcionará si está utilizando androidx. si no es así, debe usar la versión anterior de appcompat de esa importación.
fuente