115 votes

setResult ne fonctionne pas lorsque le bouton BACK est enfoncé

J'essaie de définir les résultats après avoir appuyé sur le bouton RETOUR. J'appelle onDestroy

 Intent data = new Intent();
setResult(RESULT_OK, data) 
 

Mais quand il s'agit de

 onActivityResult(int requestCode, int resultCode, Intent data) 
 

le resultCode est 0 (RESULT_CANCELED) et les données sont 'null'.

Alors, comment puis-je transmettre le résultat d'une activité terminée par le bouton RETOUR?

169voto

n224576 Points 626

Vous devez remplacer la méthode onBackPressed () et définir le résultat avant l'appel de la superclasse, c'est-à-dire

 @Override
public void onBackPressed() {
    Bundle bundle = new Bundle();
    bundle.putString(FIELD_A, mA.getText().toString());

    Intent mIntent = new Intent();
    mIntent.putExtras(bundle);
    setResult(RESULT_OK, mIntent);
    super.onBackPressed();
}
 

74voto

JBM Points 1419

L'activité résultat doit être défini avant de terminer() est appelée. En cliquant sur le DOS en fait des appels de finition() sur votre activité, vous pouvez utiliser le code suivant:

@Override
public void finish() {
    Intent data = new Intent();
    setResult(RESULT_OK, data); 

    super.finish();
}

Si vous appelez NavUtils.navigateUpFromSameTask(); dans onOptionsItemSelected(), finition() est appelé, mais vous obtiendrez le mauvais code de résultat. Donc, vous devez appeler le finish() pas navigateUpFromSameTask dans onOptionsItemSelected(). mal requestCode dans onActivityResult

21voto

khurramengr Points 94

si vous voulez définir un RESULT_CODE personnalisé dans l'événement onBackPressed, vous devez d'abord définir le résultat, puis appeler super.onBackPressed () et vous recevrez le même RESULT_CODE dans la méthode onActivityResult de l'activité de l'appelant.

     @Override
    public void onBackPressed()
    {
         serResult(SOME_INTEGER);
         super.onBackPressed();
    }
 

11voto

alex2k8 Points 12225

Je refactored mon code. Au départ, j'ai préparé des données et les ai définies comme résultat d’activité dans onDestroy (cela n’a pas fonctionné). Maintenant, je définis les données d'activité à chaque fois que les données à renvoyer sont mises à jour et que rien ne se trouve dans onDestroy.

2voto

Ankur Points 19

Référez-vous à la doc onActivityResult (int, int, Intent)

La solution consiste à vérifier le code de résultat pour la valeur Activité.RESULT_CENCELED . Si oui, cela signifie que vous avez appuyé sur BACK ou que l'activité s'est bloquée. J'espère que ça marche pour vous les gars, travaille pour moi :).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X