2016-12-21 9 views
1

Я развиваюсь на Google Pixel под управлением Android 7.1.1.Android 7.1.1 методы кнопки обратной связи не называются

Ниже представлены 2 мероприятия, PlayActivity и ScoreScreenActivity. Поток должен выглядеть так: Main> Play> Game> Score> [back button]> Play> [back button]> Main.

Когда кнопка возврата нажата в ScoreScreenActivity, вызывается метод onKeyPressed(). Мы перенаправляемся на PlayActivity. Все идет нормально. Теперь, когда мы находимся в PlayActivity, когда снова нажата кнопка возврата, мы НЕПРАВИЛЬНО перенаправляемся обратно в GameActivity из Activity, который называется ScoreScreenActivity. Вместо этого мы должны быть отправлены в MainActivity.

Кроме того, у меня есть finish() после startActivity() в GameActivity и в ScoreScreenActivity. А также, получает отображается эта ошибка, когда мы переходим от ScoreScreenActivity к PlayActivity:

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

Вот коды деятельности: Не функциональный код:

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; 
} 

Функциональный код:

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

опубликовать активность гр –

+0

@Charuka я отправил свои образцы кода, а для некоторых Причина мой код работает сейчас. Но не уверен, почему он не работал раньше. – joshua

+0

все, что не работает должным образом .. сейчас? –

ответ

0

Вы можете справиться с этим следующим образом:

для уровня API 5 и больше (новый)

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

старше 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 
}