Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActionBarActivity requestFeature must be called before adding content

Edit reflecting matias's comments

Actually, originally I had no supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); or requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); in my code until I noticed the runtime exception when below combinations of actions happened

User presses Home button to minimize the application and tried to resume it from Recent Apps (which is long press of the home button)

When Screen rotation occurs (Note: The manifest does not have configChange declarations)

Then i thought showing indeterminate progress bar during initialization should be causing the issue, so only i tried calling request* methods , thinking it will clear it off, but nothing happened..

Finally i removed showPdIndeterminate(); for the sake of testing. Hence nowhere in my code i am showing it. Still the same happens during the aforementioned circumstances


I have a fragment based ActionBarActivity, my layout is wrapped inside DrawerLayout with two framelayouts to hold two frgaments.

I tried requestFeature() must be called before adding content error on super.onCreate but still same exception for

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

and showPdIndeterminate() is

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

I am getting NullPointerException if I try supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);, so only commented it.

The error log is:

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

Note: I am getting this exception on orientation change as well as when i launch it from recent applications list by pressing home button

This exception is **eventually** arising regrdless of having (not having) setRetainInstance(true); in fragment's onActivityCreated() oronCreate()`

Why is this happening? How to solve it?

like image 804
nmxprime Avatar asked Jun 16 '14 05:06

nmxprime


1 Answers

Override setContentView in your Activity and see where / what is calling the method. Once you find out what is calling it, I'm sure we can figure out a workable solution.

@Override
public void setContentView (int layoutResID)
{
  //Set a break point on the next line or log out a message. 
  super.setContentView(layoutResID);
}
like image 74
Justin Breitfeller Avatar answered Oct 20 '22 17:10

Justin Breitfeller