TP2 – Activités et Intents
Objectifs:
Vous apprendrez à:
• Créez une nouvelle activité dans Android studio
• Définir les activités parent et enfant pour la navigation "Up".
• Démarrer des activités avec des intents explicites.
• Passez des données entre les activités avec des « intent extras »
Exercice 1 :
Tâches à réaliser :
Dans cette pratique, vous allez:
1. Créer une nouvelle application Android avec deux activités.
2. Passer certaines données (une chaîne) de l'activité principale à la seconde en
utilisant une intent, et afficher ces données dans la secondeactivité.
3. .Envoyer une deuxième partie de données à l'activité principale, également en
utilisant des intents.
Vue d’ensemble de l’application
Dans ce exercice, vous allez créer une application appelée « nom_prenom » qui contient
deux activités. Cette application sera construite en deux étapes.
Dans la première étape, créez une application dont l'activité principale contient un seul
bouton (Envoyer). Lorsque l'utilisateur clique sur ce bouton, votre activité principale utilise
un intent afin de commencer la deuxième activité.
Dans la deuxième étape, vous allez ajouter une vue EditText à l'activité principale. L'utilisateur
entre un message et clique sur Envoyer. L'activité principale utilise un intent à la fois pour
démarrer la seconde activité et pour envoyer le message de l'utilisateur à cette activité. La
deuxième activité affiche le message reçu.
Partie 1 : démarrer une autre activité
Création de la première activité :
• créer un nouveau projet nommé TP2, avec le nom de layout activity_main.xml,
• dans le fichier activity_main.xml ajouter les définitions des éléments suivants :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link]
xmlns:app="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/messg"
android:hint="Taper votre message"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Second Activity"
android:layout_marginTop="69dp"
android:layout_below="@+id/messg"
android:id="@+id/btnDemarrerSecondActivity" />
</RelativeLayout>
• Modifiez le code de la classe [Link] implémentant OnClickListener pour gérer un
événement de click sur le bouton envoyer comme suivant:
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity implements [Link] {
public static final String EXTRA_MESSG = "Hello From MainActivity";
Button envoyer;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
envoyer = (Button) findViewById([Link]. envoyer);
[Link](this);
}
@Override
public void onClick(View view) { //TO DO }
}
1
• Création de la deuxième activité :
• Créer une seconde activité: FileàNewàActivityàEmpty ou Blank Activity, nommée
SecondActivity,
• Le fichier activity_second.xml contient un seul élément TextView comme suivant ;
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:id="@+id/messg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.337" />
</[Link]>
• [Link] est l’activité qu’on veut démarrer contenant un TextView qui affiche
Second Activity,
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_second);
setTitle(getLocalClassName());
Intent intent = getIntent();
String message =[Link](MainActivity.EXTRA_MESSG);
TextView textView = (TextView) findViewById([Link]);
[Link](message);
}
}
2
• Dans le fichier [Link] définir SecondActivity et son Intent Filter comme
suivant :
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="[Link].SECOND_ACTIVITY" />
<category android:name="[Link]" />
</intent-filter>
</activity>
• Exécuter l’application,
Partie 2 : passer les données à la seconde activité
On veut faire passer quelques données à la seconde activité via l’objet intent, pour cela on
va changer le code java des deux classes d’activités pour réaliser cette tâche, vous procédez
de cette façon :
• Dans le fichier [Link] ajouter les modifications suivantes pour envoyer le
message à partir de :
@Override
public void onClick(View view) {
// 1. put key/value data
EditText messg = findViewById([Link]);
String MESSAGE = [Link]().toString();
// 2. create an intent pass class name or intent action name
Intent intent = new Intent(this, [Link]);
[Link](EXTRA_MESSG, MESSAGE);
startActivity(intent);
// 5. start the activity
startActivity(intent);
3
• Pour la seconde activité changer la classe [Link] pour recevoir le même
message :
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_second);
setTitle(getLocalClassName());
Intent intent = getIntent();
String message =[Link](MainActivity.EXTRA_MESSG);
TextView textView = (TextView) findViewById([Link]);
[Link](message);
}
}
• Executer le programme,
• Analyser le code de ce programme en répondant sur les questions suivantes:
a. Comment démarrer une autre activité ?
b. Quel est le rôle de chaque méthode : setOnClickListener(), onClick(),
putExtra(), getIntent(), getExtras() ?
c. Quel est le rôle de la classe Intent?
TAF:
1- Créer un projet dans lequel vous réaliser le passage des informations suivantes:
filière, département, laboratoire et service d’une activité principale à une autre
activité en utilisant la classe Intent, et d’ajouter un bouton dans l’autre activité pour
retourner à l’activité principale.
2- Faire les modifications pour afficher les informations citées ci-dessus sous forme
d’une liste dans la deuxième activité.
4
Exo 2 : Mini-app « RSVP événement »
Objectif
Vous devez implémenter une activité RsvpActivity qui permet à un utilisateur de s’inscrire
(RSVP) pour un évènement.
Comportement attendu :
• L’utilisateur saisit son nom dans un EditText (@+id/name).
• Il choisit son mode de participation via deux RadioButton dans un RadioGroup : un
pour le Présentiel et un autre pour En ligne.
• Il clique sur le bouton Confirmer.
• L’application affiche un message de confirmation dans un TextView (ex. « Merci Imane—
vous participerez en présentiel »).
Tâches à réaliser
1. Associer le layout XML à l’activité RsvpActivity.
2. Déclarer et initialiser les vues : EditText name, RadioButton inperson, RadioButton
online, Button confirmBtn, TextView confirmation.
3. Implémenter la méthode appelée au clic du bouton (deux options : via android:onClick
dans le XML ou via setOnClickListener en Java).
4. Valider la saisie : le nom ne doit pas être vide. Si vide, afficher un Toast d’erreur et écrire
« Nom requis » dans confirmation.
5. Si saisie ok, afficher la confirmation textuelle dans confirmation.
6. (Bonus) Sauvegarder le texte confirmation lors d’une rotation.
Questions pour réflexion
a) C’est quoi la ligne de code nécessaire pour associer le layout à l’activité ?
b) Vous créez une méthode qui sera appelée lors du clic sur le bouton Confirmer. Donner la
signature exacte de cette méthode.
c) Vous avez déclaré deux attributs dans l’activité :
private RadioButton inperson;
private RadioButton online;
Donner les lignes de code nécessaires pour lier inperson et online aux boutons radio. (Où les
placer ?)