title: Android requestFeature() must be called, NOT a Dialog
body: <p>First of all let me apologize, this is a long post with a wall of code, but I wanted to be thorough. </p>
  
  <p>I get an error in my <code>logcat</code> when I click the button to start this <code>fragment</code> in my program. It's stating I must "<em>requestFeature() before adding content</em>". I've exhausted all resources on these forums. I went through all 16 posts on the subject but here are a few just to show you.</p>
  
  <p><a href="https://stackoverflow.com/questions/7568479/error-requestfeature-must-be-called-before-adding-content-still-wont-work">error: requestFeature() must be called before adding content - Still won&#39;t work</a></p>
  
  <p><a href="https://stackoverflow.com/questions/4826407/android-util-androidruntimeexception-requestfeature-must-be-called-before-ad">&quot;android.util.AndroidRuntimeException: requestFeature() must be called before adding content&quot; on showDialog(dialogId)</a></p>
  
  <p><a href="https://stackoverflow.com/questions/4661459/dialog-problem-requestfeature-must-be-called-before-adding-content">Dialog problem: requestFeature() must be called before adding content</a></p>
  
  <p><a href="https://stackoverflow.com/questions/10839414/error-requestfeature-must-be-called-before-adding-content-although-it-is-c">Error: &quot;requestFeature() must be called before adding content&quot;, although it is called before setContentView()</a></p>
  
  <p>None of these solutions worked</p>
  
  <p>The recurring theme with these posts seems to be a problem with <code>dialogs</code>, <code>custom</code>, <code>action</code>, etc. My error occurs when trying to launch a <code>fragment</code> that captures signatures. Similar but not that same.</p>
  
  <p>So here is my code and my logcat. </p>
  
  <p><strong>fragment</strong></p>
  
  <pre><code>public class CaptureSignature extends Fragment {
  
  private static final Context Context = null;
  View view;
  LinearLayout mContent;
  signature mSignature;
  Button mClear, mGetSign, mCancel;
  public static String tempDir;
  public int count = 1;
  public String current = null;   
  View mView;
  File mypath;
  
  private String uniqueId;
  private EditText yourName;
  
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
  
      this.getActivity().requestWindowFeature(Window.FEATURE_NO_TITLE);       
  
      view = inflater.inflate(R.layout.fragment_signature, container, false); 
  
      mClear = (Button) view.findViewById(R.id.clear);
      mGetSign = (Button) view.findViewById(R.id.getsign);
      mGetSign.setEnabled(false);
      mCancel = (Button) view.findViewById(R.id.cancel);
      yourName = (EditText) view.findViewById(R.id.yourName);
  
      uniqueId = getTodaysDate() + "_" + getCurrentTime() + "_"
              + Math.random();
      current = uniqueId + ".png";
  
      mContent = (LinearLayout) view.findViewById(R.id.linearLayout);
      mSignature = new signature(Context, null);
      mSignature.setBackgroundColor(Color.WHITE);
      mContent.addView(mSignature, LayoutParams.MATCH_PARENT,
              LayoutParams.MATCH_PARENT);     
      mView = mContent;       
  
      mClear.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
              Log.v("log_tag", "Panel Cleared");
              mSignature.clear();
              mGetSign.setEnabled(false);
          }
      });
  
      mGetSign.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
              Log.v("log_tag", "Panel Saved");
              boolean error = captureSignature();
              if (!error) {
                  mView.setDrawingCacheEnabled(true);                                         
              }
          }
      });
  
      mCancel.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
              Log.v("log_tag", "Panel Canceled");                         
          }
      });
      return view;
  
  }   
  
  @Override
  public void onDestroy() {
      Log.w("GetSignature", "onDestory");
      super.onDestroy();
  }
  
  private boolean captureSignature() {
  
      boolean error = false;
      String errorMessage = "";
  
      if (yourName.getText().toString().equalsIgnoreCase("")) {
          errorMessage = errorMessage + "Please enter your Name\n";
          error = true;
      }
  
      if (error) {
          Toast toast = Toast
                  .makeText(Context, errorMessage, Toast.LENGTH_SHORT);
          toast.setGravity(Gravity.TOP, 105, 50);
          toast.show();
      }
  
      return error;
  }
  
  private String getTodaysDate() {
  
      final Calendar c = Calendar.getInstance();
      int todaysDate = (c.get(Calendar.YEAR) * 10000)
              + ((c.get(Calendar.MONTH) + 1) * 100)
              + (c.get(Calendar.DAY_OF_MONTH));
      Log.w("DATE:", String.valueOf(todaysDate));
      return (String.valueOf(todaysDate));
  
  }
  
  private String getCurrentTime() {
  
      final Calendar c = Calendar.getInstance();
      int currentTime = (c.get(Calendar.HOUR_OF_DAY) * 10000)
              + (c.get(Calendar.MINUTE) * 100) + (c.get(Calendar.SECOND));
      Log.w("TIME:", String.valueOf(currentTime));
      return (String.valueOf(currentTime));
  
  }       
  
  public class signature extends View {
      private static final float STROKE_WIDTH = 5f;
      private static final float HALF_STROKE_WIDTH = STROKE_WIDTH / 2;
      private Paint paint = new Paint();
      private Path path = new Path();
  
      private float lastTouchX;
      private float lastTouchY;
      private final RectF dirtyRect = new RectF();
  
      public signature(Context captureSignature, AttributeSet attrs) {
          super(captureSignature, attrs);
          paint.setAntiAlias(true);
          paint.setColor(Color.BLACK);
          paint.setStyle(Paint.Style.STROKE);
          paint.setStrokeJoin(Paint.Join.ROUND);
          paint.setStrokeWidth(STROKE_WIDTH);
      }
  
  
  
      public void clear() {
          path.reset();
          invalidate();
      }
  
      @Override
      protected void onDraw(Canvas canvas) {
          canvas.drawPath(path, paint);
      }
  
      @Override
      public boolean onTouchEvent(MotionEvent event) {
          float eventX = event.getX();
          float eventY = event.getY();
          mGetSign.setEnabled(true);
  
          switch (event.getAction()) {
          case MotionEvent.ACTION_DOWN:
              path.moveTo(eventX, eventY);
              lastTouchX = eventX;
              lastTouchY = eventY;
              return true;
  
          case MotionEvent.ACTION_MOVE:
  
          case MotionEvent.ACTION_UP:
  
              resetDirtyRect(eventX, eventY);
              int historySize = event.getHistorySize();
              for (int i = 0; i &lt; historySize; i++) {
                  float historicalX = event.getHistoricalX(i);
                  float historicalY = event.getHistoricalY(i);
                  expandDirtyRect(historicalX, historicalY);
                  path.lineTo(historicalX, historicalY);
              }
              path.lineTo(eventX, eventY);
              break;
  
          default:
              debug("Ignored touch event: " + event.toString());
              return false;
          }
  
          invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH),
                  (int) (dirtyRect.top - HALF_STROKE_WIDTH),
                  (int) (dirtyRect.right + HALF_STROKE_WIDTH),
                  (int) (dirtyRect.bottom + HALF_STROKE_WIDTH));
  
          lastTouchX = eventX;
          lastTouchY = eventY;
  
          return true;
      }
  
      private void debug(String string) {
      }
  
      private void expandDirtyRect(float historicalX, float historicalY) {
          if (historicalX &lt; dirtyRect.left) {
              dirtyRect.left = historicalX;
          } else if (historicalX &gt; dirtyRect.right) {
              dirtyRect.right = historicalX;
          }
  
          if (historicalY &lt; dirtyRect.top) {
              dirtyRect.top = historicalY;
          } else if (historicalY &gt; dirtyRect.bottom) {
              dirtyRect.bottom = historicalY;
          }
      }
  
      private void resetDirtyRect(float eventX, float eventY) {
          dirtyRect.left = Math.min(lastTouchX, eventX);
          dirtyRect.right = Math.max(lastTouchX, eventX);
          dirtyRect.top = Math.min(lastTouchY, eventY);
          dirtyRect.bottom = Math.max(lastTouchY, eventY);
      }
  }
  }
  </code></pre>
  
  <p><strong>Main Activity Code</strong></p>
  
  <pre><code>public class Main extends Activity {
  
  TabListener&lt;Store_Fragment&gt; surveyTabListener;  
  TabListener&lt;Store_Fragment&gt; assetTabListener;
  TabListener&lt;Store_Fragment&gt; installTabListener;
  TabListener&lt;Store_Fragment&gt; punchTabListener;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {        
      super.onCreate(savedInstanceState); 
  
      this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  
      setContentView(R.layout.activity_main);     
  
      // instantiate ActionBar
      ActionBar actionBar = getActionBar();
      //actionBar.setBackgroundDrawable((getResources()
      //.getDrawable(R.drawable.titlebarheader)));
      actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
      actionBar.setTitle("Trakflex");
      actionBar.setDisplayShowTitleEnabled(true);
  
      // set surveyTab
      Tab surveyTab = actionBar.newTab();
      surveyTabListener = new TabListener&lt;Store_Fragment&gt;(this,
              R.id.header_fragment_container, Store_Fragment.class);      
      surveyTab.setText("Survey").setContentDescription("Survey Tab")
              .setTabListener(surveyTabListener);
      actionBar.addTab(surveyTab);
  
      // set assetTab
      Tab assetTab = actionBar.newTab();
      assetTabListener = new TabListener&lt;Store_Fragment&gt;(this,
              R.id.header_fragment_container, Store_Fragment.class);
      assetTab.setText("Assets").setContentDescription("Assets Tab")
              .setTabListener(assetTabListener);
      actionBar.addTab(assetTab);
  
      // set installTab
      Tab installTab = actionBar.newTab();
      installTabListener = new TabListener&lt;Store_Fragment&gt;(this,
              R.id.header_fragment_container, Store_Fragment.class);
      installTab.setText("Install Checklist")
              .setContentDescription("Install Checklist Tab")
              .setTabListener(installTabListener);
      actionBar.addTab(installTab);
  
      // set punchTab
      Tab punchTab = actionBar.newTab();
      punchTabListener = new TabListener&lt;Store_Fragment&gt;(this,
              R.id.header_fragment_container, Store_Fragment.class);
      punchTab.setText("Punchlist").setContentDescription("Punchlist Tab")
              .setTabListener(punchTabListener);
      actionBar.addTab(punchTab);
  
  }
  </code></pre>
  
  <p><strong>new logcat</strong></p>
  
  <pre><code>05-13 18:57:19.767: E/AndroidRuntime(8950): FATAL EXCEPTION: main
  05-13 18:57:19.767: E/AndroidRuntime(8950): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.facilitysolutionsinc.trackflex/com.facilitysolutionsinc.trackflex.Main}: java.lang.NullPointerException
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.os.Handler.dispatchMessage(Handler.java:99)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.os.Looper.loop(Looper.java:137)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.ActivityThread.main(ActivityThread.java:5041)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at java.lang.reflect.Method.invokeNative(Native Method)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at java.lang.reflect.Method.invoke(Method.java:511)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at dalvik.system.NativeStart.main(Native Method)
  05-13 18:57:19.767: E/AndroidRuntime(8950): Caused by: java.lang.NullPointerException
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at com.facilitysolutionsinc.trackflex.Main.onCreate(Main.java:32)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.Activity.performCreate(Activity.java:5104)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
  05-13 18:57:19.767: E/AndroidRuntime(8950):     ... 11 more
  </code></pre>
  
  <p>If anyone can help I would be extremely grateful</p>