2016-12-21 6 views
1

Ich entwickle auf einem Google Pixel mit Android 7.1.1.Android 7.1.1 zurück Button Methoden nicht aufgerufen werden

Unten sind 2 Aktivitäten, PlayActivity und ScoreScreenActivity. Der Ablauf sollte wie folgt aussehen: Haupt> Spiel> Spiel> Partitur> [Zurück-Taste]> Spiel> [Zurück-Taste]> Haupt.

Wenn die Zurück-Taste in ScoreScreenActivity gedrückt wird, wird die onKeyPressed() -Methode aufgerufen. Wir werden zu PlayActivity weitergeleitet. So weit, ist es gut. Nun, da wir uns in PlayActivity befinden und die Zurück-Taste erneut gedrückt wird, werden wir von der Aktivität, die ScoreScreenActivity aufgerufen hat, unzutreffend zu GameActivity zurückgeleitet. Wir sollten stattdessen zu MainActivity gesendet werden.

Auch ich habe finish() nach StartActivity() in GameActivity und in ScoreScreenActivity. Und auch, wird dieser Fehler angezeigt wird, wenn wir von ScoreScreenActivity zu PlayActivity gehen:

W/ViewRootImpl[ScoreScreenActivity]: Cancelling event due to no window focus: KeyEvent 

Hier werden die Aktivitätscodes sind: Nicht funktionelle Code:

public class PlayActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_play); 

    Button mOneMinute = (Button) findViewById(R.id.play_one_minute); 
    if (mOneMinute!=null){ 
     mOneMinute.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(PlayActivity.this, GameActivity.class); 
       startActivity(intent); 
       finish(); 
      } 
     }); 

    } 
} 
@Override 
public void onBackPressed(){ 
    System.out.println("this isn't printed either"); 
    // AlertDialog happens here 
} 
// Copy & Pasted from another StackOverFlow (http://stackoverflow.com/questions/16646301/onbackpressed-is-not-being-called) 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    System.out.println("never gets printed"); 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Log.d("back", "should go back to MainActivity"); 
     Intent i=new Intent(PlayActivity.this, MainActivity.class); 
     startActivity(i); 
     finish(); 
    } 
    return true; 
} 

Functional Code:

public class ScoreScreenActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_score_screen); 
     int score = 0; 
     Intent intent = getIntent(); 
     score = intent.getIntExtra("mScore", score); 
     System.out.println(score); 

     TextView mTV = (TextView) findViewById(R.id.score_text); 
     if (mTV != null){ 
      mTV.setTextSize(20); 
      mTV.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
      String str = "Well Done!\nYour Score: "+ score +"\nThere's no high score system for now,\n" + 
        "so remember this score\nif it's a new high score!"; 
      SpannableString ss = new SpannableString(str); 
      ss.setSpan(new RelativeSizeSpan(2), 0, 25, 0); 
      mTV.setText(ss); 
     } 
     Button mReturn = (Button) findViewById(R.id.score_return); 
     if (mReturn!= null){ 
      mReturn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent returnIntent = new Intent(ScoreScreenActivity.this, MainActivity.class); 
        startActivity(returnIntent); 
       } 
      }); 
     } 

    } 

    @Override 
    public void onBackPressed(){ 
     System.out.println("this does not get printed"); 
     // AlertDialog happens here 
    } 

    // Copy & Pasted from another StackOverFlow (http://stackoverflow.com/questions/16646301/onbackpressed-is-not-being-called) 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     System.out.println("this gets printed"); 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Log.e("back",""+1); 
      Intent i=new Intent(ScoreScreenActivity.this,PlayActivity.class); 
      startActivity(i); 
      finish(); 
     } 
     return true; 
    } 
} 
+0

posten Sie Ihre Aktivität c –

+0

@Charuka ich meine Codebeispiele geschrieben, und für einige Grund, dass mein Code jetzt funktioniert. Aber nicht sicher, warum es früher nicht funktioniert hat. – joshua

+0

alles, was nicht wie erwartet funktioniert .. jetzt? –

Antwort

0

Sie können damit umgehen:

für API-Level 5 und höher (neu)

@Override 
public void onBackPressed() { 
    // your code. 
} 

älter als API 5

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // your code 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); // u are missing this 
} 
Verwandte Themen