15. Intentions¶
Structure Générale¶
Le code définit une activité principale (MainActivity) qui contient deux composants Composable pour démarrer d’autres
activités.
MainActivity¶
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Column {
StartOtherActivity()
StartOtherActivityWithValue()
}
}
}
}
- C’est l’activité principale qui hérite de
ComponentActivity - Dans
onCreate, elle définit son contenu avec deux composants Composable dans uneColumn
StartOtherActivity¶
@Composable
fun StartOtherActivity() {
val context = LocalContext.current
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text = "Écran Principal")
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {
val intent = Intent(context, SecondActivity::class.java)
context.startActivity(intent)
}) {
Text("Aller à l'écran secondaire")
}
}
}
- Ce composant affiche un titre et un bouton
- Quand on clique sur le bouton, il crée un
Intentpour démarrerSecondActivity - L’
Intentest un mécanisme Android pour démarrer une autre activité
StartOtherActivityWithValue¶
@Composable
fun StartOtherActivityWithValue() {
val context = LocalContext.current
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Button(onClick = {
val intent = Intent(context, ThirdActivity::class.java)
intent.putExtra("buttonValue", 1)
context.startActivity(intent)
}) {
Text("Bouton 1")
}
// Deuxième bouton similaire avec valeur 2
}
}
- Ce composant affiche deux boutons
- Chaque bouton démarre
ThirdActivityen passant une valeur différente putExtrapermet de passer des données à l’activité suivante
Points Importants à Noter¶
- L’utilisation de
LocalContext.currentpour obtenir le contexte nécessaire à la création d’Intent - La différence entre un simple changement d’activité et un changement avec passage de données
- L’organisation du layout avec
Column,Spacer, et les modificateurs pour l’alignement - L’utilisation de composants Jetpack Compose (
Button,Text, etc.)
Je vais expliquer ce code qui représente une activité secondaire dans l’application.
Structure de SecondActivity¶
La Classe SecondActivity¶
class SecondActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SecondScreen(
onNavigateBack = {
finish()
}
)
}
}
}
- Cette classe hérite de
ComponentActivity, comme l’activité principale - Dans
onCreate, elle définit son contenu avec le composantSecondScreen - La fonction
finish()est passée comme callback pour gérer le retour à l’écran précédent finish()est une méthode Android qui termine l’activité courante et retourne à l’activité précédente
Le Composant SecondScreen¶
@Composable
fun SecondScreen(onNavigateBack: () -> Unit) {
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text = "Écran Secondaire")
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = onNavigateBack) {
Text("Retourner à l'écran principal")
}
}
}
- Le composant prend un paramètre
onNavigateBackqui est une fonction lambda sans paramètres (() -> Unit) - L’interface est simple avec :
- Un titre “Écran Secondaire”
- Un espace vertical de 16dp
- Un bouton pour revenir à l’écran principal
- Le layout utilise une
Columncentrée horizontalement et verticalement - Le modificateur
fillMaxSize()fait occuper tout l’espace disponible à la colonne
Points Importants à Noter¶
-
Gestion de la Navigation
- La navigation retour est gérée proprement avec
finish() - Le callback est passé du niveau activité au composant Composable
- La navigation retour est gérée proprement avec
-
Structure du Code
- Séparation claire entre l’activité et l’interface utilisateur
- Utilisation de composants réutilisables
-
Bonnes Pratiques
- Le composant
SecondScreenest découplé de l’activité - La navigation est gérée via un callback plutôt qu’une référence directe à l’activité
- Le composant
-
Interface Utilisateur
- Layout simple et centré
- Utilisation appropriée des espacements
- Interface claire et intuitive
Structure de ThirdActivity¶
La Classe ThirdActivity¶
class ThirdActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val buttonValue = intent.getIntExtra("buttonValue", 0)
setContent {
ThirdScreen(
buttonValue = buttonValue,
onNavigateBack = {
finish()
}
)
}
}
}
- Cette activité récupère une valeur passée via l’
IntentavecgetIntExtra - Le second paramètre
0est la valeur par défaut si aucune valeur n’est trouvée - La valeur récupérée est passée au composant
ThirdScreen
Le Composant ThirdScreen¶
@Composable
fun ThirdScreen(
buttonValue: Int,
onNavigateBack: () -> Unit
) {
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text = "Valeur reçue : $buttonValue")
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = onNavigateBack) {
Text("Retour")
}
}
}
- Le composant prend deux paramètres :
buttonValue: la valeur reçue de l’activité précédenteonNavigateBack: le callback pour retourner à l’écran précédent
- L’interface affiche la valeur reçue et un bouton de retour
Points Importants à Noter¶
-
Passage de Données
- Utilisation de
getIntExtrapour récupérer la donnée passée - Correspond au
putExtravu dans le premier fichier - Important de spécifier une valeur par défaut
- Utilisation de
-
Cycle de Communication
- L’activité principale envoie une valeur
- La troisième activité la récupère
- La valeur est affichée à l’écran
-
Architecture
- Séparation claire entre la logique (récupération des données) et l’affichage
- Le composant Composable reste pur et réutilisable
-
String Template
- Utilisation de
$buttonValuepour insérer la valeur dans le texte - Exemple simple d’interpolation de chaînes en Kotlin
- Utilisation de
Ce code complète bien les deux premiers fichiers en montrant comment :
- Recevoir des données d’une autre activité
- Afficher ces données dans l’interface
- Maintenir une architecture propre et modulaire