Android 在添加内容之前,必须调用ActionBarActivity requestFeature

Android 在添加内容之前,必须调用ActionBarActivity requestFeature,android,android-fragments,android-actionbaractivity,Android,Android Fragments,Android Actionbaractivity,编辑matias的评论 实际上,最初我没有supportRequestWindowFeature(Window.FEATURE\u不确定\u进度)或请求窗口功能(窗口功能\u不确定\u进度)在我的代码中,直到我注意到以下操作组合发生时出现运行时异常 用户按下主页按钮以最小化应用程序,并尝试从最近的应用程序恢复应用程序(长按主页按钮) 屏幕旋转时(注意:清单没有configChange声明) 然后我认为在初始化过程中显示不确定的进度条应该是导致问题的原因,所以只有我尝试调用request*方法,认

编辑matias的评论

实际上,最初我没有
supportRequestWindowFeature(Window.FEATURE\u不确定\u进度)
请求窗口功能(窗口功能\u不确定\u进度)在我的代码中,直到我注意到以下操作组合发生时出现
运行时异常

用户按下主页按钮以最小化应用程序,并尝试从最近的应用程序恢复应用程序(长按主页按钮)

屏幕旋转时(注意:清单没有configChange声明)

然后我认为在初始化过程中显示不确定的进度条应该是导致问题的原因,所以只有我尝试调用
request*
方法,认为这样会清除它,但什么也没有发生

最后我删除了
showPdIndeterminate()用于测试。因此,我的代码中没有任何地方显示它。在上述情况下仍然会发生同样的情况


我有一个基于片段的
ActionBarActivity
,我的布局被包装在
DrawerLayout
中,带有
两个框架布局
以容纳两个frgament

我试过了,但还是有同样的例外

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.e(TAG, "Inside OnCreate");
    // supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    showPdIndeterminate();
           ....
}
showPDUndeterminate()

private void showPdIndeterminate() {
    pd = ProgressDialog.show(this, "Initializing", "Pls wait...");
    pd.setIndeterminate(true);
    pd.show();
}
如果我尝试
supportRequestWindowFeature(Window.FEATURE\u不确定\u进度),我会得到
NullPointerException
,因此仅对其进行了注释

错误日志为:

06-16 04:04:57.280: D/AndroidRuntime(27280): Shutting down VM
06-16 04:04:57.280: W/dalvikvm(27280): threadid=1: thread exiting with uncaught exception (group=0x413592a0)
06-16 04:04:57.285: E/AndroidRuntime(27280): FATAL EXCEPTION: main
06-16 04:04:57.285: E/AndroidRuntime(27280): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.demo/com.example.demo.MainActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3553)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.os.Looper.loop(Looper.java:137)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread.main(ActivityThread.java:4898)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at java.lang.reflect.Method.invokeNative(Native Method)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at java.lang.reflect.Method.invoke(Method.java:511)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at dalvik.system.NativeStart.main(Native Method)
06-16 04:04:57.285: E/AndroidRuntime(27280): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
06-16 04:04:57.285: E/AndroidRuntime(27280):    at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:267)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.Activity.requestWindowFeature(Activity.java:3320)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:63)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at com.example.demo.MainActivity.onCreate(MainActivity.java:464)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.Activity.performCreate(Activity.java:5206)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
06-16 04:04:57.285: E/AndroidRuntime(27280):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
06-16 04:04:57.285: E/AndroidRuntime(27280):    ... 12 more
注意:我在方向更改以及通过按“主页”按钮从“最近的应用程序”列表启动时遇到此异常

此异常**最终**产生,无需为具有(不具有)
setRetainInstance(true)而感到后悔在片段的
onActivityCreated()或
onCreate()`


为什么会这样?如何解决它?

android.support.v7.app.ActionBarActivity
通过添加一个
操作栏来更改窗口的内容。此外,
功能\u不确定\u进度
取决于是否存在操作栏

试着这样做:

@Override
protected void onCreate(Bundle savedInstanceState) {
   ABD = ActionBarActivityDelegate.createDelegate(this);
   super.onCreate(savedInstanceState);
   ABD.onCreate(savedInstanceState);
}
可以找到
ActionBarActivityDelegate


最后,如果可能的话,你应该考虑锁定你的屏幕方向。这将被详细描述。

尝试在
setcontentView()之前调用
requestWindowFeature()
,但在
onCreate()之后调用


对我有效。

在活动中重写
setContentView
,并查看调用该方法的位置/内容。一旦你找到了它的名称,我相信我们可以找到一个可行的解决方案

@Override
public void setContentView (int layoutResID)
{
  //Set a break point on the next line or log out a message. 
  super.setContentView(layoutResID);
}

每个副本的可能副本:使用@Rod_Algonquin,发布错误log@ianhanniballake,如果它是重复的,就像你提到的,我没有从建议的链接中找到解决方案,你能从中发布一个答案吗link@nmxprime你在使用android.support.v7.app.ActionBarActivity吗?你指的是ActionBarDelegae,它不在我使用的
android.support.v7
库中(我肯定没有使用过时的库),实际上应用程序必须支持orientatonchange@nmxprime你看过我为ActionBarActivityDelegate提供的链接了吗??它是支持v7的一部分,以确保从4.4.2_r1起可用。我在安卓4.1.2中得到了报告,你能建议任何方法来覆盖它吗,因为我不知道还有什么其他方法可以做?我怀疑问题是作者可能以意外的方式调用setContentView(或者有其他东西调用它)。如果是这种情况,答案是他只是发现了这一点(这就是为什么我提出了我的解决方案)。贾斯汀,如果你再次阅读我的评论,
还有什么
这意味着
除了调用它的超级方法之外,还有什么其他的事情要做…
如果你阅读我在示例中留下的评论,你应该在那里设置一个断点。一旦您这样做了,您就可以查看调用的堆栈跟踪,并在您的requestWindowFeature调用之前查看是谁在调用setContentView谢谢Justin让我试试