Я получаю эту 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.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
Ответы:
Я также столкнулся с этой проблемой, но когда я вызываю запрос окна перед вызовом super.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();
Обратите внимание на следующее:
источник
requestWindowFeature
раньшеsuper.onCreate
. Вы не можете быть уверены в состоянии Activity до этого момента.Я получил это исключение (
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
) при использованиив более старом устройстве под управлением Android 2.3.5 (Gingerbread). Я использую библиотеку поддержки v7.
Ошибка была исправлена, когда я изменил его на использование:
(Это также происходит после моего вызова super.onCreate в исправлении). См. Документы на https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportRequestWindowFeature(int)
Так что это может быть скорее вводящее в заблуждение сообщение об ошибке, чем что-либо еще.
источник
appCompat
и этоsupportRequestWindowFeature
помогло мне, и мне не нужно было ставить его раньшеsuper.onCreate
Убедитесь, что ваш класс является наследником Activity или ActionBarActivity. Если вы используете ActionBarActivity, используйте Activity.
источник
Если вы используете свою активность как диалог (с Theme.Dialog), убедитесь, что вы расширяете Activity вместо ActionBarActivity (значение по умолчанию предоставляется мастером Android Studio). Тогда вы можете использовать
или же
ПОСЛЕ
super.onCreate()
...источник
Я также столкнулся с этой ошибкой из-за другого рабочего процесса. Я создал собственный класс DialogFragment и два
@Override
функции - onCreateView и onCreateDialog. Моя функция onCreateView взяла настраиваемый макет для фрагмента, а моя функция onCreateDialog создала AlertDialog.Builder.Это не сработало, потому что 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.
Надеюсь, это поможет кому-то в будущем!
Вот несколько ТАК вопросов, которые мне помогли:
источник
<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, и приведенный выше ответ не сработал. Мне пришлось использовать getDialog (), чтобы удалить заголовок:
источник
Extend ( Activity ) вместо ( ActionBarActivity )
пример:
public class Itemdetails extends Activity {....
затем в onCreate напишите:
super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.Your_Activity);
источник
Я думаю, что самый простой способ сделать это - использовать приведенный ниже код
getActionBar().setTitle(null);
источник
Попробуйте следующие варианты, хотя бы один из них должен вам подойти:
Если вы используете DialogFragment, попробуйте не переопределять оба метода
onCreateDialog(..)
иonCreateView(..)
(это изменение сработало для меня)пробовать
supportRequestWindowFeature(Window.FEATURE_NO_TITLE)/requestWindowFeature(Window.FEATURE_NO_TITLE)
доsetContentView(..)
в деятельности и послеsuper.onCreate(..);
Попробуйте вариант 2 раньше
super.onCreate(..);
источник
Неуместно ваша строка: super.onCreate (savedInstanceState);
используйте этот способ:
@Override protected void onCreate(Bundle savedInstanceState) { this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_qrscanner);
источник
У меня была эта ошибка,
AlertDialog
и ошибка возникала в API 19 только тогда, когдаdialog.show()
вызове.выяснил, что
android.app.AlertDialog
импорт вызывает проблему, поэтому я изменил его наandroidx.appcompat.app.AlertDialog
и исправил.Обратите внимание, что это будет работать, если вы используете androidx. в противном случае вам следует использовать старую версию этого импорта appcompat.
источник