web-dev-qa-db-fra.com

Android: capturer le retour d'une activité

J'ai une question concernant le lancement de nouvelles activités. Cela se résume à cela. J'ai 3 onglets sur une vue

A) contains gMap activity
 B) camera activity
 C) some random text fields.

La condition est que l'application s'exécute en mode Portrait.

Les 3 onglets fonctionnent comme prévu avec l'exception de la surface d'aperçu de la caméra (B). Il est tourné de 90 degrés. La seule façon de le rendre correct est de définir l'application en mode paysage qui jette tous mes onglets et est pratiquement impossible à utiliser.

Ma solution est la suivante: remplacer

mon activité de caméra avec une activité régulière qui est vide avec l'exception de

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

Cela lance ma CameraActivity. Et ça marche bien. J'ai dû faire une mise en page linéaire et inclure 3 images qui ressemblent à de vrais onglets, donc je peux essayer d'imiter le fonctionnement des onglets tout en faisant pivoter l'écran en paysage et en gardant les visuels comme portrait. L'utilisateur peut cliquer sur l'une des images (boutons) pour afficher l'onglet suivant. C'est mon problème. Il devrait quitter mon "activité de caméra" en retournant à "l'activité vide" dans un onglet, où il devrait être interprété pour cliquer sur l'onglet désélectionné de mon image.

L'essentiel est, quand il revient, il revient à une page vierge (noire) sous un onglet (car il est "vide"). Comment puis-je capturer l'événement de retour sur la page qui a appelé l'activité, puis voir quelle action ils ont effectuée?

Je peux définir un écouteur onclick où je peux répondre aux faux onglets (images) cliqués pour quitter l'activité de la caméra. À la sortie, l'onglet devrait se mettre à jour de sorte que c'est là que vous revenez. Aucune suggestion?

Merci,

81
Chrispix

Je vais me concentrer sur la façon de résoudre votre solution de contournement afin qu'elle se comporte comme vous le souhaitez.

Pour capturer des actions effectuées sur une activité dans une autre, il faut trois étapes.

Lancez l'activité secondaire (votre "activité caméra") en tant que sous-activité en utilisant startActivityForResult au lieu de startActivity.

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

Au sein de la sous-activité (activité de la caméra), plutôt que de simplement fermer l'activité lorsqu'un utilisateur clique sur l'image de l'onglet différent, vous devez créer une nouvelle intention et inclure l'index de l'onglet à afficher lorsque vous revenez à l'application parente à l'aide de l'ensemble d'options. . Pour le renvoyer au parent, appelez setResult avant d'appeler finish pour fermer l'activité de la caméra.

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

La dernière étape se trouve dans l'activité appelante, remplacez onActivityResult pour écouter les rappels de l'activité de la caméra. Obtenez le supplément de l'intention retournée pour déterminer l'index de l'onglet que vous devez afficher.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
} 
158
Reto Meier