web-dev-qa-db-fra.com

Vérifiez si la touche retour a été enfoncée dans Android?

Dis que je suis sur mon activité principale et que je commence une nouvelle activité

MainActivity > NewActivity

Et depuis NewActivity j'appuie sur la touche retour

MainActivity < NewActivity

Je veux que MainActivity fasse quelque chose s'il est affiché après la fermeture de NewActivity, mais pas lorsque MainActivity est exécuté normalement, comme lors de la première exécution de l'application. Est-ce que quelqu'un sait si c'est possible?

20
William L.

Quelques idées:

  • Vous pouvez simplement définir un indicateur dans MainActivity lorsqu'il se déclenche NewActivity.
  • Vous pouvez appeler startActivityForResult depuis MainActivity et faire en sorte que NewActivity définisse un résultat, que vous recevrez dans MainActivity.onActivityResult() lorsque NewActivity se terminera .
8
Ted Hopp
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        Log.d(this.getClass().getName(), "back button pressed");
    }
    return super.onKeyDown(keyCode, event);
}

@Mettre à jour. Si vous souhaitez être averti lorsque NewActivity est terminé, vous devez le démarrer par startActivityForResult (Intent, requestCode). Ensuite, vous devez remplacer onActivityResult () sur MainActivity. Vérifiez le paramètre requestcode ici, si le code retour est égal au code de soumission (lorsque vous démarrez childActivity), mettez du code pour faire votre affaire.

int MYCODE=1000;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Result OK.d.
    if (requestCode == MYCODE) {
        // do something good
    }
}
21
Nguyen Minh Binh

J'essaie la méthode ci-dessous pour détecter le bouton de retour enfoncé sur la barre d'action en activité par la première méthode et la seconde est utilisée pour détecter le bouton de matériel mobile en arrière ou tuer le bouton d'activité.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case Android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onBackPressed() {
    setResult(RESULT_CANCELED);
    super.onBackPressed();
}
13
saravanan

Vous pouvez remplacer la méthode onBackPressed () dans NewActivity qui détectera lorsque le bouton de retour est enfoncé. Et puis pour en informer MainActivity à ce sujet, vous pouvez envoyer un drapeau booléen dans un bundle afin que MainActivity ne détecte que son ouverture après NewActivity.

Dans NewActivity:

       @Override
       public void onBackPressed() {
                boolean fromNewActivity=true;

        Intent mainIntent = new Intent(view.getContext(), MainActivity.class);
        Bundle bundleObj = new Bundle();
        bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity));
        mainIntent.putExtras(bundleObj);
        startActivityForResult(mainIntent, 0);
           }

Dans MainActivity dans la méthode onCreate ():

       Bundle extras = getIntent().getExtras();
       boolean fromNewActivity =Boolean.parseBoolean( extras.getString("fromNewActivity"));

Vous pouvez maintenant vérifier si la MainActivity est ouverte après NewActivity ou non.

8
Yogesh Somani

Lorsque vous démarrez NewActivity, vous devez utiliser startActivityForResult et utiliser un requestId valide. Ce requestId vous sera renvoyé à onActivityResult une fois que NewActivity sera terminé.

0
K-ballo