【问题标题】:ActionBarActivity requestFeature must be called before adding content必须在添加内容之前调用 ActionBarActivity requestFeature
【发布时间】:2014-07-17 00:50:34
【问题描述】:

编辑反映matias's cmets

实际上,最初我的代码中没有supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);,直到我注意到runtime exception when below combinations of actions happened

用户按下 Home 按钮以最小化应用程序并尝试从 Recent Apps 恢复它(长按 Home 按钮

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

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

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


我有一个基于ActionBarActivity 的片段,我的布局包含在DrawerLayouttwo framelayouts 中以容纳两个片段。

我尝试了requestFeature() must be called before adding content error on super.onCreate,但仍然是同样的例外

@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();
           ....
}

showPdIndeterminate()

private void showPdIndeterminate() {
    pd = ProgressDialog.show(this, "Initializing", "Pls wait...");
    pd.setIndeterminate(true);
    pd.show();
}

如果我尝试supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);,我会收到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

注意:我在方向更改以及通过按主页按钮从最近的应用程序列表启动它时收到此异常

无论片段的onActivityCreated() oronCreate() 中是否有(没有)setRetainInstance(true);,此异常**最终**都会产生

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

【问题讨论】:

标签: android android-fragments android-actionbaractivity


【解决方案1】:

在您的 Activity 中覆盖 setContentView 并查看调用该方法的位置/内容。一旦你找到了它的名字,我相信我们可以找到一个可行的解决方案。

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

【讨论】:

  • 你能建议任何方法来覆盖它,因为我不知道还有什么办法吗?
  • 我怀疑问题是作者可能以一种意想不到的方式调用了 setContentView(或者有其他东西在调用它)。如果是这种情况,答案是他只是发现了这一点(这就是我提出我的解决方案的原因)。
  • 贾斯汀,如果你再次阅读我的评论,what else 将暗示what else to do other than calling it's super method...
  • 如果您阅读了我在示例中留下的评论,您应该在此处设置断点。完成此操作后,您可以查看调用的堆栈跟踪,并查看在 requestWindowFeature 调用之前谁在调用 setContentView
  • 谢谢贾斯汀让我试试
【解决方案2】:

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

为我工作。

【讨论】:

    【解决方案3】:

    android.support.v7.app.ActionBarActivity 通过添加ActionBar 来更改窗口的内容。此外,FEATURE_INDETERMINATE_PROGRESS 取决于是否存在操作栏。

    试试这样的:

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

    ActionBarActivityDelegate 类可以在here 中找到。

    最后,如果可能,您应该考虑锁定屏幕方向。这个有详细描述here

    【讨论】:

    • 你指的是ActionBarDelegae,它不在我正在使用的android.support.v7库中(我确定没有使用过时的库)
    • 其实应用必须支持换向
    • @nmxprime 你看过我为 ActionBarActivityDelegate 提供的链接了吗?它肯定是支持 v7 的一部分
    • 我在 android 4.1.2 中得到报告
    猜你喜欢
    • 2011-05-14
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多