2012-03-29 3 views
0

ich eine App haben, die so besteht weit von zwei Aktivitäten:Spiel Beenden nicht richtig

  • Das Hauptmenü Aktivität.

  • Das Spiel Aktivität

Das Hauptmenü Aktivität eine Schaltfläche, die mit dem folgenden Code das Spiel Aktivität beginnt enthält:

public void onClick(View clickedButton) 
    { 
     switch(clickedButton.getId()) 
     { 
     case R.id.buttonPlay: 
      Intent i = new Intent("apple.banana.BouncingBallActivity"); 
      startActivity(i); 
      break; 
    } 

Wenn der Benutzer mit dem Spiel Aktivität erfolgt, er drückt den Zurück-Knopf. Dies ruft zuerst die Methode onPause() auf, die den Animations-Thread des Spiels anhält. Dann ruft er den onStop() auf, der finish() für die Aktivität aufruft. Der Benutzer kehrt zum Hauptmenü zurück. Der Code wird im Folgenden beschrieben:

public class BouncingBallActivity extends Activity{ 


    private BouncingBallView bouncingBallView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     bouncingBallView = new BouncingBallView(this); 
     bouncingBallView.resume(); 
     setContentView(bouncingBallView); 
    } 

    @Override 
    protected void onPause() 
    { 
     super.onPause(); 
     bouncingBallView.pause(); 
    } 

    @Override 
    protected void onResume() 
    { 
     super.onResume(); 
     bouncingBallView.resume(); 
    } 

    @Override 
    protected void onStop() 
    { 
     super.onStop(); 
     this.finish(); 
    } 
} 

Das Problem ist, dass dies nur funktioniert, wenn ich die Anwendung von Eclipse-starten. Wenn ich auf das App-Symbol klicke, beginnt das Spiel mit der Spielaktivität. Die Hauptmenüaktivität wird nicht angezeigt.

Ich bin nicht klar darüber, warum dies passiert. Es könnte etwas mit dem Manifest zu tun haben. Ich habe die relevanten Teile unten eingefügt:

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".BouncingBallActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="apple.banana.BouncingBallActivity" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MainMenu" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

Ich würde wirklich jede Hilfe mit diesem schätzen. Vielen Dank.

+0

haben Sie versucht, mit onDestroy()? – fr4n

Antwort

1

Der Anruf an finish() gehört nicht in Ihre onStop() Methode. Wenn Sie das Spiel beenden möchten, wenn der Benutzer zurück drückt, platzieren Sie es in Ihrem onPause(). Der Grund, warum die App bei späteren Starts (über die Android-Launcher-Oberfläche) von der Spielaktivität abruft, ist, dass sie nie dort verbleibt.

Wenn Sie das Spiel nur beenden möchten, wenn der Benutzer die Zurück-Taste drückt und nicht aus anderen Pausen, müssen Sie eingehende Schlüssel und finish() abfangen, wenn der Schlüssel Zurück ist.

+0

Großartig, Danke :) –

0

Sie können dies tun, wenn Sie Ihre Zurück-Taste drücken.

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     {  
      this.finish(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

oder

@Override 
public void onBackPressed() { 
    this.finish(); 
}