android.util.AndroidRuntimeException:在添加内容之前必须调用requestFeature()

我得到这个android.util.AndroidRuntimeException: requestFeature() must be called before adding content错误android.util.AndroidRuntimeException: requestFeature() must be called before adding content 。 正如你在下面的代码中看到的, requestWindowFeature(Window.FEATURE_NO_TITLE); 行在setContentView(R.layout.mainmenu);之前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的新版本的其他可能的解决scheme

在Android 4.0及更低版本上隐藏状态栏

 <application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application> 

使用活动主题的优点如下:

  • 与编程设置标志相比,维护起来更容易,而且容易出错。
  • 它会导致更平滑的UI转换,因为在实例化应用程序的主要活动之前,系统具有呈现UI所需的信息。

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(); 

请注意以下几点:

  • 一旦UI标志被清除(例如,通过导航离开活动),如果您想再次隐藏栏,则您的应用程序需要重置它们。 有关如何侦听UI可见性更改的讨论,请参阅响应UI可见性更改 ,以便您的应用程序可以做出相应的响应。
  • 你在哪里设置UI标志有所作为。 如果您将系统栏隐藏在您的活动的onCreate()方法中,并且用户按Home,系统栏将重新出现。 当用户重新打开活动时,onCreate()不会被调用,所以系统栏将保持可见。 如果您希望系统UI更改在用户导入和导出活动时保持不变,请在onResume()或onWindowFocusChanged()中设置UI标志。
  • setSystemUiVisibility()方法只有在你调用它的视图是可见的时才有效果。
  • 从视图导航导致用setSystemUiVisibility()设置的标志被清除。

我得到了这个exception( android.util.AndroidRuntimeException: requestFeature() must be called before adding content ),当使用

 requestWindowFeature(Window.FEATURE_NO_TITLE); 

在运行Android 2.3.5(姜饼)的旧设备。 我正在使用v7支持库。

当我改变它使用时,错误是固定的:

 supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

(这是在修复中的super.onCreate调用之后)。 请参阅https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportRequestWindowFeature(int)上的文档;

所以它可能更多的是一个误导性的错误信息比其他任何情况。

请检查你的类是从Activity还是ActionBarActivity扩展。 如果您正在使用ActionBarActivity,请使用“活动”。

如果您将自己的活动用作Dialog(使用Theme.Dialog),那么请确保扩展Activity而不是ActionBarActivity(使用Android Studio向导给出的默认值)。 那么你可以使用

 requestWindowFeature(Window.FEATURE_NO_TITLE); 

要么

 supportRequestWindowFeature(Window.FEATURE_NO_TITLE); 

super.onCreate() …之后…

我正在扩展一个DialogFragment ,上面的答案没有工作。 我不得不使用getDialog()来删除标题:

 getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
  <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> 

我也遇到了来自不同工作stream程的这个错误。 我创build了一个自定义的DialogFragment类,并创build了两个@Override函数 – onCreateView和onCreateDialog。 我的onCreateView函数抓取了片段的自定义布局,我的onCreateDialog函数创build了一个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预定义的正/负button。 我的解决scheme是在我的自定义对话框视图中创build正面/负面的button,所以我删除了我的实现覆盖onCreateDialog函数。

希望这有助于未来的人!

以下是一些帮助我的问题:

  • 在DialogFragment中为AlertDialog夸大自定义视图的问题
  • DialogFragment中的ViewPager – IllegalStateException:Fragment没有视图
  • DialogFragment的自定义布局OnCreateView与OnCreateDialog
  • 指定的孩子已经有一个父母。 您必须首先调用子对象的父对象的removeView()

扩展( 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);