为了账号安全,请及时绑定邮箱和手机立即绑定

android.util.AndroidRuntimeException:

/ 猿问

android.util.AndroidRuntimeException:

烧仙草VB 2019-11-15 13:00:45

我收到此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)


查看完整描述

3 回答

?
慕少森

我也遇到了这个问题,但是当我在调用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>

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


与以编程方式设置标志相比,维护起来更容易且更不容易出错。

这样可以使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()设置的标志被清除。


查看完整回答
反对 回复 2019-11-15
?
函数式编程

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

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


因此,比起其他任何情况,它更可能是误导性错误消息的情况。


查看完整回答
反对 回复 2019-11-15
?
米脂

我还从其他工作流程中遇到了此错误。我创建了一个自定义DialogFragment类,并创建了两个@Override函数-onCreateView 和onCreateDialog。我的onCreateView函数获取了片段的自定义布局,而我的onCreateDialog函数创建了AlertDialog.Builder。


这似乎不起作用,因为在onCreateView之前调用了onCreateDialog。在删除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函数的实现。


希望这对以后的人有所帮助!


查看完整回答
反对 回复 2019-11-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信