title: Going back to Main Activity on Android app with back key to see user score
body: <p>Hopefully I can get some advice on this.</p>
  
  <p>My program has a sprite that, when hit/clicked, a score is tallied on screen.  When the game is over (time runs out), I want the user to be able to press the back key on their phone to go back to the main/start screen/activity where they began the game, but it will also show their score (how many hits).</p>
  
  <p>I'm struggling to figure out how to get it to go back with the back key press.  I can figure out the high score bit at a later date if need be.  I just want to get back to that start screen.</p>
  
  <p>UPDATE:</p>
  
  <p>I think it may have something to do with my manifest as to why it's not working.  I've tried to add the 'GameView' class to the manifest but it won't accept it.  It says it has no default constructor.  Any ideas?</p>
  
  <pre><code>&lt;application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" &gt;
      &lt;activity
          android:name="cct.mad.lab.MainMenu"
          android:label="@string/app_name" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
      &lt;activity
          android:name=".GameActivity"
          android:label="@string/app_name" &gt;
       &lt;/activity&gt;
      &lt;activity
          android:name=".GameView"
          android:label="@string/app_name" &gt;
      &lt;/activity&gt;
  </code></pre>
  
  <p></p>
  
  <p></p>
  
  <p>My GameView code is below:</p>
  
  <pre><code>public class GameView extends SurfaceView implements SurfaceHolder.Callback {
  
  /* Member (state) fields   */
  private GameLoopThread gameLoopThread;
  private Paint paint; //Reference a paint object 
  /** The drawable to use as the background of the animation canvas */
  private Bitmap mBackgroundImage;
  // For creating the game Sprite
  private Sprite sprite;
  // For recording the number of hits
  private int hitCount;
  // To track if a game is over
  private boolean gameOver;
  // To play sound
  private SoundPlayer sound;
  
  //int backButtonCount = 0;
  
  public GameView(Context context) {
      super(context);
      // Focus must be on GameView so that events can be handled.
      this.setFocusable(true);
      // For intercepting events on the surface.
      this.getHolder().addCallback(this);
      // Background image added
      mBackgroundImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.half_moon);
  
      //sound = new SoundPlayer(this);
  
  }
   /* Called immediately after the surface created */
  public void surfaceCreated(SurfaceHolder holder) {
      // We can now safely setup the game start the game loop.
      ResetGame();//Set up a new game up - could be called by a 'play again option'
      mBackgroundImage = Bitmap.createScaledBitmap(mBackgroundImage, getWidth(), getHeight(), true);
      gameLoopThread = new GameLoopThread(this.getHolder(), this);
      gameLoopThread.running = true;
      gameLoopThread.start();
  }
  
  
  
  // For the countdown timer
  private long startTime; // Timer to count down from
  private final long interval = 1 * 1000; // 1 sec interval
  private CountDownTimer countDownTimer; // Reference to the class
  private boolean timerRunning = false;
  private String displayTime; // To display the time on the screen
  
  
  //To initialise/reset game
  private void ResetGame(){
      /* Set paint details */
      paint = new Paint();
      paint.setColor(Color.WHITE); 
      paint.setTextSize(20);
      sprite = new Sprite(this);
      hitCount = 0;
      // Set timer
      startTime = 10; // Start at 10s to count down
      // Create new object - convert startTime to milliseconds
      countDownTimer = new MyCountDownTimer(startTime*1000, interval);
      countDownTimer.start(); // Start the time running
      timerRunning = true;
      gameOver = false;
  
  
  }
  
  // Countdown Timer - private class
  private class MyCountDownTimer extends CountDownTimer {
  
      public MyCountDownTimer (long startTime, long interval) {
          super(startTime, interval);
      }
      public void onFinish() {
          //displayTime = "Time is up!";
          timerRunning = false;
          countDownTimer.cancel();
          gameOver = true;
      }
      public void onTick (long millisUntilFinished) {
          displayTime = " " + millisUntilFinished / 1000;
      }
  }
  
  
  //This class updates and manages the assets prior to drawing - called from the Thread
  public void update(){
  
      sprite.update();
  
  }
  /**
   * To draw the game to the screen
   * This is called from Thread, so synchronisation can be done
   */
  public void doDraw(Canvas canvas) {
      //Draw all the objects on the canvas
      canvas.drawBitmap(mBackgroundImage, 0, 0, null);
  
      if (!gameOver) {
          sprite.draw(canvas);
          canvas.drawText("Time Remaining: " + displayTime, 35, 50, paint);
          canvas.drawText("Number of hits: " + hitCount, 250, 50, paint);
      } else
          canvas.drawText("Game Over!", 185, 100, paint);
          canvas.drawText("To go back to the main menu, press the 'back' key", 15, 150, paint);
  
  
  }
  
  //To be used if we need to find where screen was touched
  public boolean onTouchEvent(MotionEvent event) {
          if (sprite.wasItTouched(event.getX(), event.getY())) {
              // This just renews the sprite for now
              sprite = new Sprite(this);
              //sound.playZapSound();
              hitCount++;
  
          }
      return true;
  }
  
  public void surfaceDestroyed(SurfaceHolder holder) {
      gameLoopThread.running = false;
  
      // Shut down the game loop thread cleanly.
      boolean retry = true;
      while(retry) {
          try {
              gameLoopThread.join();
              retry = false;
          } catch (InterruptedException e) {}
      }
  }
  
  public void getHitCount() {
  
  
  
  }
  
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  
  }
  
  }
  </code></pre>
  
  <p>My MainActivity is below:</p>
  
  <pre><code>public class MainMenu extends Activity {
  
  private static final int SCORE_REQUEST_CODE = 1;// The request code for the intent
  
  TextView tvScore;
  String score;
  Intent gameIntent;
  
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.game_start);
  }
  
  public void startGame(View v){
      gameIntent = new Intent(this,GameActivity.class);
      startActivityForResult(gameIntent, SCORE_REQUEST_CODE );  
  }
  /* Create Options Menu */
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main_menu, menu);
      return true;
  }
  
  // Respond to item selected on OPTIONS MENU
  public boolean onOptionsItemSelected(MenuItem item) {
      // Handle item selection
      switch (item.getItemId()) {
      //put data in Intent
      case R.id.easy:
          Toast.makeText(this, "Easy chosen", Toast.LENGTH_SHORT).show();
          return true;
      case R.id.medium:
          Toast.makeText(this, "Medium chosen", Toast.LENGTH_SHORT).show();
          return true;
      case R.id.hard:
          Toast.makeText(this, "Hard chosen", Toast.LENGTH_SHORT).show();
          return true;
      case R.id.other:
          Toast.makeText(this, "Other chosen", Toast.LENGTH_SHORT).show();
          return true;
      default:
          return super.onOptionsItemSelected(item);
      }
  }
  
  protected void onActivityResult(int requestCode, int resultCode, Intent retIntent) {
      // Check which request we're responding to
      if (requestCode == SCORE_REQUEST_CODE) {
          // Make sure the request was successful
          if (resultCode == RESULT_OK) {
              if (retIntent.hasExtra("GAME_SCORE")) {
                  int scoreFromGame = retIntent.getExtras().getInt("GAME_SCORE");
                  tvScore.setText(Integer.toString(scoreFromGame));
              }
          }   
      }
  
  }
  
  
  }
  </code></pre>
  
  <p>As always, any help greatly appreciated.</p>
  
  <p>Thanks</p>