Passage de paramètres entre activités
Couramment sous Android une activité A est amenée à lancer une activité B, scénario très commun.
Nous allons étudier ici comment une activité A lancera une activité B en lui passant un paramètre, comment l’activité B recevra ce paramètre et comment à la fin de la vie de l’activité B, cette dernière retournera un paramètre de retour à l’activité A.
En bref : comment passer des paramètres dans les deux sens : émetteur vers récepteur et inversement.
La procédure est assez simple, voici les étapes :
1) L’activité A lancera l’activité B avec la méthode startActivityForResult(…), au lieu d’utiliser la méthode classique startActivity(…).
2) L’activité B recevra le paramètre passé grâce à l’Intent.
3) L’activité B avant de se terminer, utilisera la méthode setResult(…) pour retourner un paramètre à l’activité A.
4) Enfin, l’activité A recevra le résultat en utilisant une callback onActivityResult(..).
L’activité A
Dans le code ci-dessous le nom de la classe sera MainActivity.
L’activité B
Dans le code ci-dessous le nom de la classe sera Activity2.
Pour ce faire, créez un projet Android avec 2 activités : la première lancera la seconde, cette dernière s’arrêtera et on reviendra dans la pile sur la première activité.
Etape 1
On définit dans l’activité A une chaine de caractères dans la classe.
public class MainActivity extends Activity { public final static String EXTRA_MESSAGE = "com.ltm.ltmactionbar.MESSAGE"; }
L’activité A lance l’activité 2. Placez le code ci-dessous dans l’activité A à un endroit opportun type derrière un bouton.
Intent i1 = new Intent( MainActivity.this, Activity2.class ); i1.putExtra(EXTRA_MESSAGE, edit1.getText().toString()); startActivityForResult(i1, 0);
Ci-dessus on utilise la méthode startActivityForResult(…) pour garantir le lancement de l’activité B, l’intent permettra de passer un paramètre avec la méthode putExtra(..).
Etape 2 et 3
L’activité B se lance, reçoit le paramètre envoyé par l’activité A grâce à l’Intent, et propose un bouton de retour pour retourner le résultat à l’activité A.
public class Activity2 extends Activity { // Activité B @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_activity2); // intent final Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); final TextView tv1 = (TextView)findViewById( R.id.resultat ); tv1.setText( message ); Button b_retour =(Button)findViewById(R.id.bouton_retour); b_retour.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Intent i2 = new Intent(); i2.putExtra(MainActivity.EXTRA_MESSAGE, "valeur de retour"); Activity2.this.setResult(1, i2); Activity2.this.finish(); } }); } // ... }
Ci-dessus à la création de l’activité B le paramètre issu de l’activité A est reçu et envoyé dans un widget du type TextView. Un bouton de retour est proposé celui-ci permettra de retourner un paramètre de retour à l’activité A et de terminer celle-ci (méthode finish()).
Etape 4
L’activité A reçoit le résultat de l’activité B en utilisant une callback onActivityResult(..).
public class MainActivity extends Activity { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if( resultCode==1 ) { String s = data.getStringExtra(EXTRA_MESSAGE); Toast.makeText(this, s, Toast.LENGTH_SHORT).show(); } super.onActivityResult(requestCode, resultCode, data); } //... }
Ci-dessous l’activité A reçoit deux retours de l’activité B : d’une part un entier le resultCode et d’autre part un objet Intent.
Si cet article vous a plu, n’hésitez pas à le partager grâce aux boutons ci-dessous.
L’une des explications les plus claires sur les intents. Merci
je cherche le même tuto mais en Javascript (et non en java) pour une application hybride (html5,ccc,js) sous cordova
Avez vous ca ?
D’avance merci
En fait les activités et les Intent sont propres à Android. Avec Cordova on utilise des WebView qui permettent de créer des composants Web. Pour passer des paramètres entre vues (HTML), on utilisera plutôt des objets JavaScript, voir le stockage local.
Bonjour, à quoi correspond edit1 dans la ligne
i1.putExtra(EXTRA_MESSAGE, edit1.getText().toString()); ?
Car, Android Studio me signale « edit1 » en erreur de compilation, seulement je ne vois vraiment pas par quoi le remplacer…
edit1 est une variable qui représente le champ d’édition. On va chercher le texte contenu dans le champ.
Il faut donc créer dans le code cette variable avec findViewById.
EditText edit1 = (EditText)findViewById(R.id.idducontrole);