2017-08-16 4 views
0

à l'activité début pour résultat:Android - jeu de résultats de l'activité sur l'activité fermée

Intent intent = new Intent(MainActivity.this, DetailsActivity.class); 
startActivityForResult(intent,EVENT_DETAILS_REQUEST); 

Dans mon DetailsActivity, pour définir le résultat et les extras, qui peuvent être utilisés dans l'activité principale:

@Override 
    public void onBackPressed() 
    { 
     Intent resultIntent = new Intent(); 
     resultIntent.putExtra("isEdited",isEdited); 
     setResult(RESULT_OK,resultIntent); 
     finish(); 
    } 

Enfin , dans MainActivity:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data) 
{ 
    switch(requestCode) 
    { 
    ...... 
    case EVENT_DETAILS_REQUEST: 
    boolean isEdited = data.getBooleanExtra("isEdited", false); 
    ....... 
    break; 

    } 

} 

Ceci est bien tant que l'utilisateur utilise le bouton "Précédent" (ou barre de navigation système) pour fermer DetailsActivity. Si l'utilisateur appuie sur la flèche "Retour" en haut de l'activité pour fermer l'activité, onBackPressed ne sera pas appelée et les données onActivityResult seront nulles.

J'ai essayé d'utiliser , onStop, onFinish au lieu de onBackPressed pour le gérer de travail, mais je reçois toujours data pour onActivityResult nulle.

Quelle est la bonne façon de résoudre mon problème?

+0

Utilisez android: launchMode = "singleTop" dans le fichier manifeste .. –

+0

Il est déjà là. – user1209216

+0

Veuillez coller votre code onOptionsItemSelected. –

Répondre

3
@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
     case android.R.id.home: 
      onBackPressed(); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

Remplacer cette méthode dans votre activité de détail ... et ce code

+0

Réponse parfaite, merci. Je n'avais aucune idée de l'endroit où capturer l'activité de la flèche arrière. – user1209216

1

Ajouter dans votre DetailsActivity

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
     Intent resultIntent = new Intent(); 
     resultIntent.putExtra("isEdited",isEdited); 
     setResult(RESULT_OK,resultIntent); 
      finish(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 
0

Ceci est appelé automatiquement lorsque le matériel backpressed ..

public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 

      //your code here 

      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
0

Vous pouvez le faire pour envoyer le résultat dans tous les cas de fermeture possibles:

@Override 
public void finish() { 
    Intent data = new Intent(); 
    Intent resultIntent = new Intent(); 
    resultIntent.putExtra("isEdited", isEdited); 
    setResult(RESULT_OK, resultIntent); 
    super.finish(); 
}