title: surfaceview + buttons findviewbyid returns null
body: <p>My code is ok but unfortunately my code gives me null pointer exception. I know that by writing the setcontentview before findviewbyid it wont happen but then by doing so my surface does not update.I tried lot searching about this but i am not able to get proper answer for this please help me.My code for mainctivity:-</p>
  
  <pre><code>package com.example.snakes;
  
  public class MainActivity extends Activity implements View.OnClickListener{
  
  MySurfaceClass sc;
  Button up,down,left,right;
  //View v1,v2;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      sc = new MySurfaceClass(this);
      //setContentView(R.layout.activity_main);
  
      up = (Button) findViewById(R.id.button1);
      down = (Button) findViewById(R.id.button2);
      left = (Button) findViewById(R.id.button3);
      right = (Button) findViewById(R.id.button4);
  
      up.setOnClickListener(this);
      down.setOnClickListener(this);
      left.setOnClickListener(this);
      right.setOnClickListener(this);
      setContentView(R.layout.activity_main);
  
      // Toast.makeText(this, "done", Toast.LENGTH_SHORT).show();
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_main, menu);
      return true;
  }
  
  public void onClick(View v) {
      switch(v.getId()){
      case R.id.button1:
          sc.posY = sc.posY - 50 ;
          Toast.makeText(this, "up", Toast.LENGTH_SHORT).show();
      //   sc = new MySurfaceClass(this);
        //   setContentView(R.layout.activity_main);
          break;
  
      case R.id.button2:
          sc.posY = sc.posY + 50 ;
          Toast.makeText(this, "down", Toast.LENGTH_SHORT).show();
          // sc = new MySurfaceClass(this);
           //setContentView(R.layout.activity_main);
          break;
  
      case R.id.button3:
          sc.posX = sc.posX - 50 ;
          Toast.makeText(this, "left", Toast.LENGTH_SHORT).show();
          //sc = new MySurfaceClass(this);
          //setContentView(R.layout.activity_main);
          break;
  
      case R.id.button4:
          sc.posX = sc.posX + 10 ;
          Toast.makeText(this, "right", Toast.LENGTH_SHORT).show();
          //setContentView(R.layout.activity_main);
          break;
      }
  }
  }
  </code></pre>
  
  <p>while the code for surface activity:-</p>
  
  <pre><code>package com.example.snakes;
  
  
  public class MySurfaceClass extends SurfaceView implements Runnable {
  
  private SurfaceHolder sh;
  private Thread t = null;
  private boolean isRunning;
  private Bitmap b;
  protected int posX, posY;
  
  public MySurfaceClass(Context context) {
      super(context);
      init();
  }
  
  public MySurfaceClass(Context context, AttributeSet attrs) {
      super(context, attrs);
      init();
  }
  
  public MySurfaceClass(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
      init();
  }
  
  void init() {
      isRunning = true;
      b = BitmapFactory.decodeResource(getResources(), R.drawable.face);
      posX = 0;
      posY = 0;
      sh = this.getHolder();
      t = new Thread(this);
      t.start();
  };
  
  @Override
  protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      canvas.drawRect(100, 100, 100, 100, null);
  }
  
  public void run() {
      while (isRunning) {
          if (!sh.getSurface().isValid())
              continue;
  
          Canvas c = sh.lockCanvas();
          c.drawRGB(5, 150, 10);
          c.drawBitmap(b, posX, posY, null);
          sh.unlockCanvasAndPost(c);
      }
  }
    }
  </code></pre>
  
  <p>and the xml :-</p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" &gt;
  
  
  
  &lt;LinearLayout
      android:id="@+id/view1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/grey"
      android:weightSum="100" &gt;
  
      &lt;Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="up" 
          android:layout_weight="25"/&gt;
  
      &lt;Button
          android:id="@+id/button2"
          android:layout_weight="25"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="down" /&gt;
  
      &lt;Button
          android:id="@+id/button3"
          android:layout_weight="25"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="left" /&gt;
  
      &lt;Button
          android:id="@+id/button4"
          android:layout_weight="25"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="right" /&gt;
  &lt;/LinearLayout&gt;
  
  &lt;FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent" &gt;
  
      &lt;com.example.snakes.MySurfaceClass
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:id="@+id/surfaceView"
          /&gt;
  &lt;/FrameLayout&gt;
  </code></pre>
  
  <p></p>