андроид.утиль.AndroidRuntimeException: requestFeature() должен быть вызван перед добавлением содержимого
я получаю это android.util.AndroidRuntimeException: requestFeature() must be called before adding content
ошибка. Как вы можете видеть в приведенном ниже коде,requestWindowFeature(Window.FEATURE_NO_TITLE);
строка перед setContentView(R.layout.mainmenu);
строка кода. Этот код onCreate () имеет один и тот же формат практически в каждой моей деятельности, и до сих пор у меня никогда не было проблем с ним. С тех пор, как я обновился до ADT 22, повсюду появлялось много случайных ошибок. Я прополол через много этих ошибок, и это мой последний.
что я могу сделать, чтобы исправить это ошибка?
@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.access0(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
9 ответов:
Я также столкнулся с этой проблемой, но когда я вызываю запрос окна перед вызовом супер.onCreate () затем проблема была решена, пожалуйста, попробуйте его тоже нравится..
@Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.mainmenu); }
надеюсь, что это поможет вам...:)
отредактировано: для других возможных решений для Android были новые версии
скрыть строку состояния на Android 4.0 и ниже
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
преимущества использования темы активности заключаются в следующем следует:
- это проще в обслуживании и менее подверженным ошибкам, чем установка флага программно.
- это приводит к более плавным переходам пользовательского интерфейса, потому что система имеет информацию, необходимую для визуализации пользовательского интерфейса перед созданием экземпляра основной деятельности вашего приложения.
Android версия ниже, чем 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); }
скрыть строку состояния на Android 4.1 и Выше
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();
обратите внимание на следующее:
- после того как флаги пользовательского интерфейса были очищены (например, путем перехода от деятельности), ваше приложение должно сбросить их, если вы хотите скрыть бары. Смотрите реагирование на изменения видимости пользовательского интерфейса для обсуждения того, как слушать изменения видимости пользовательского интерфейса, чтобы ваше приложение могло реагировать соответствующим образом.
- где вы устанавливаете флаги пользовательского интерфейса имеет значение. Если вы скроете системные панели метод onCreate() вашей активности и пользователь нажимает Home, системные панели появятся снова. Когда пользователь снова откроет действие, onCreate () не будет вызван, поэтому системные панели останутся видимыми. Если вы хотите, чтобы изменения пользовательского интерфейса системы сохранялись при переходе пользователя в действие и из него, установите флаги пользовательского интерфейса в onResume() или onWindowFocusChanged().
- метод setSystemUiVisibility () имеет эффект только в том случае, если вид, из которого вы его вызываете, виден.
- переход от просмотр приводит к очистке флагов, установленных с помощью setSystemUiVisibility ().
я получил это исключение (
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
) при использованииrequestWindowFeature(Window.FEATURE_NO_TITLE);
в старом устройстве под управлением Android 2.3.5 (Gingerbread). Я использую библиотеку поддержки v7.
ошибка была исправлена, когда я изменил его использовать:
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
(Это приходит после моего супер.onCreate вызов в исправление тоже). См. документы по адресу https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportRequestWindowFeature(int)
Так что это может быть больше случай вводящего в заблуждение сообщения об ошибке, чем что-либо еще.
пожалуйста, проверьте, что ваш класс расширяется от Activity или ActionBarActivity. Если вы используете ActionBarActivity, пожалуйста, используйте Activity.
Если вы используете свою активность в качестве диалогового окна (с темой.Dialog), затем убедитесь, что вы расширяете Activity вместо ActionBarActivity (значение по умолчанию, заданное вам с помощью мастера Android Studio). Тогда вы можете использовать
requestWindowFeature(Window.FEATURE_NO_TITLE);
или
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
после
super.onCreate()
...
<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>
просто только установить стиль, как это не требуется никаких изменений кодирования стороны.
Я также столкнулся с этой ошибкой из другого рабочего процесса. Я создал пользовательский класс DialogFragment и создал два
@Override
функции-onCreateView и onCreateDialog. Моя функция onCreateView захватила пользовательский макет для фрагмента, и моя функция onCreateDialog создала AlertDialog.Строитель.это не работает, потому что onCreateDialog вызывается перед onCreateView. После того, как я удалил onCreateView [путем перемещения моего пользовательского представления инфляции в onCreateDialog, я обнаружена ошибка:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Я понял, что моя трудность связана с попыткой реализовать оба переопределения, так как я хотел 1) использовать макет для основного вида диалога и 2) использовать предопределенные положительные / отрицательные кнопки Builder. Мое решение состояло в том, чтобы создать положительные / отрицательные кнопки в моем пользовательском диалоговом окне, поэтому я удалил свою реализацию функции Override onCreateDialog.
надеюсь, что это поможет кому-то в будущее!
вот некоторые так вопросы, которые помогли мне:
- проблема раздувания пользовательского представления для AlertDialog в DialogFragment
- ViewPager в DialogFragment-IllegalStateException: фрагмент не имеет представления
- пользовательский макет для DialogFragment OnCreateView против OnCreateDialog
- указанный ребенок уже имеет родителя. Вы должны позвонить removeView() на сначала родитель ребенка
я расширял a DialogFragment и выше ответ не работал. Мне пришлось использовать getDialog (), чтобы удалить заголовок:
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);