Aggiungere un'azione a un messaggio

Prova Compose
Jetpack Compose è il toolkit per la UI consigliato per Android. Scopri come aggiungere notifiche in Scrivi.

Puoi aggiungere un'azione a un Snackbar per consentire all'utente di rispondere al tuo messaggio. In questo modo, Snackbar inserisce un pulsante accanto al testo del messaggio e l'utente può attivare l'azione toccando il pulsante. Ad esempio, un'app email potrebbe inserire un pulsante Annulla nel messaggio "Email archiviata". Se l'utente tocca il pulsante Annulla, l'app estrae di nuovo l'email dall'archivio.

Notifica snackbar con un pulsante di azione ANNULLA
Figura 1. Un Snackbar con un pulsante di azione di annullamento che ripristina un elemento rimosso.

Per aggiungere un'azione a un messaggio Snackbar, definisci un oggetto listener che implementi l'interfaccia View.OnClickListener. Il sistema chiama il metodo onClick() del listener se l'utente tocca l'azione suggerita del messaggio. Ad esempio, questo snippet mostra un listener per un'azione di annullamento:

class MyUndoListener : View.OnClickListener {

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

Utilizza uno dei metodi setAction() per collegare il listener a Snackbar. Collega il listener prima di chiamare show(), come mostrato in questo esempio di codice:

val mySnackbar = Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_archived,
    Snackbar.LENGTH_SHORT
)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
Se utilizzi Jetpack Compose, puoi mostrare un SnackbarHost, come mostrato nell'esempio seguente:
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") }
                }
            )
        }
    }
}