Ajouter une action à un message

Essayer Compose
Jetpack Compose est le kit d'outils d'UI recommandé pour Android. Découvrez comment ajouter des notifications dans Compose.

Vous pouvez ajouter une action à un Snackbar pour permettre à l'utilisateur de répondre à votre message. Lorsque vous le faites, Snackbar place un bouton à côté du texte du message, et l'utilisateur peut déclencher votre action en appuyant sur le bouton. Par exemple, une application de messagerie peut ajouter un bouton Annuler au message "E-mail archivé". Si l'utilisateur appuie sur le bouton Annuler, l'application sort l'e-mail de l'archive.

Notification Snackbar avec un bouton d'action ANNULER
Figure 1. Un Snackbar avec un bouton d'annulation qui restaure un élément supprimé.

Pour ajouter une action à un message Snackbar, définissez un objet d'écouteur qui implémente l'interface View.OnClickListener. Le système appelle la méthode onClick() de votre écouteur si l'utilisateur appuie sur l'action liée au message. Par exemple, cet extrait montre un écouteur pour une action d'annulation :

class MyUndoListener : View.OnClickListener {

    override fun onClick(v: View) {
        // Code to undo the user's last action.
    }
}

Utilisez l'une des méthodes setAction() pour associer l'écouteur à votre Snackbar. Associez le listener avant d'appeler show(), comme indiqué dans cet exemple de code :

val mySnackbar = Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_archived,
    Snackbar.LENGTH_SHORT
)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
Si vous utilisez Jetpack Compose, vous pouvez afficher un SnackbarHost, comme illustré dans l'exemple suivant :
override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    setContent {
        DACPlaygroundTheme {
            val snackbarHostState = remember { SnackbarHostState() }
            val scope = rememberCoroutineScope()
            Scaffold(
                snackbarHost = { SnackbarHost(snackbarHostState) },
                content = { padding ->
                    Button(
                        modifier = Modifier.padding(padding),
                        onClick = {
                            scope.launch {
                                snackbarHostState.showSnackbar(
                                    message = "1 item removed",
                                    actionLabel = "UNDO",
                                    duration = SnackbarDuration.Short
                                ).run {
                                    when (this) {
                                        Dismissed -> Log.d("SNACKBAR", "Dismissed")
                                        ActionPerformed -> Log.d("SNACKBAR", "UNDO CLICKED")
                                    }
                                }
                            }
                        }
                    ) { Text("Show snackbar") }
                }
            )
        }
    }
}