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 nuovamente l'email dall'archivio.
Figura 1. Un Snackbar con un pulsante di azione Annulla che consente di ripristinare un elemento rimosso.
Per aggiungere un'azione a un messaggio Snackbar, definisci un oggetto listener
che implementa l'interfaccia
View.OnClickListener. Il sistema chiama il metodo onClick()
dell'ascoltatore se l'utente tocca l'azione del messaggio. Ad esempio, questo snippet mostra un ascoltatore per un'azione di annullamento:
Kotlin
classMyUndoListener:View.OnClickListener{funonClick(v:View){// Code to undo the user's last action.}}
Java
publicclassMyUndoListenerimplementsView.OnClickListener{@OverridepublicvoidonClick(Viewv){// Code to undo the user's last action.}}
Utilizza uno dei metodi
setAction()
per collegare l'ascoltatore al tuo Snackbar. Collega il
listener prima di chiamare
show(),
come mostrato in questo esempio di codice:
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[null,null,["Ultimo aggiornamento 2025-07-27 UTC."],[],[],null,["# Add an action to a message\n\nTry the Compose way \nJetpack Compose is the recommended UI toolkit for Android. Learn how to add notifications in Compose. \n[Snackbar →](/develop/ui/compose/components/snackbar) \n\nYou can add an action to a\n[Snackbar](/reference/com/google/android/material/snackbar/Snackbar)\nto let the user respond to your message. When you do this, the\n`Snackbar` puts a button next to the message text, and the user can\ntrigger your action by tapping the button. For example, an email app might put\nan *undo* button on its \"email archived\" message. If the user taps the\n*undo* button, the app takes the email back out of the archive.\n**Figure 1.** A `Snackbar` with an undo action button that restores a removed item.\n\nTo add an action to a `Snackbar` message, define a listener object\nthat implements the\n[View.OnClickListener](/reference/android/view/View.OnClickListener)\ninterface. The system calls your listener's\n[onClick()](/reference/android/view/View.OnClickListener#onClick(android.view.View))\nmethod if the user taps the message action. For example, this snippet shows a\nlistener for an undo action: \n\n### Kotlin\n\n```kotlin\nclass MyUndoListener : View.OnClickListener {\n\n fun onClick(v: View) {\n // Code to undo the user's last action.\n }\n}\n```\n\n### Java\n\n```java\npublic class MyUndoListener implements View.OnClickListener {\n\n @Override\n public void onClick(View v) {\n\n // Code to undo the user's last action.\n }\n}\n```\n\nUse one of the\n[setAction()](/reference/com/google/android/material/snackbar/Snackbar#setAction(int, android.view.View.OnClickListener))\nmethods to attach the listener to your `Snackbar`. Attach the\nlistener before you call\n[show()](/reference/com/google/android/material/snackbar/BaseTransientBottomBar#show()),\nas shown in this code sample: \n\n### Kotlin\n\n```kotlin\nval mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),\n R.string.email_archived, Snackbar.LENGTH_SHORT)\nmySnackbar.setAction(R.string.undo_string, MyUndoListener())\nmySnackbar.show()\n```\n\n### Java\n\n```java\nSnackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),\n R.string.email_archived, Snackbar.LENGTH_SHORT);\nmySnackbar.setAction(R.string.undo_string, new MyUndoListener());\nmySnackbar.show();\n```\nIf you are using [Jetpack Compose](/jetpack/compose), you can show a [SnackbarHost](/reference/kotlin/androidx/compose/material/package-summary#SnackbarHost(androidx.compose.material.SnackbarHostState,androidx.compose.ui.Modifier,kotlin.Function1)), as shown in the following example: \n\n### Kotlin\n\n```kotlin\n override fun onCreate(savedInstanceState: Bundle?) {\n\n super.onCreate(savedInstanceState)\n\n setContent {\n DACPlaygroundTheme {\n val snackbarHostState = remember { SnackbarHostState() }\n val scope = rememberCoroutineScope()\n Scaffold(\n snackbarHost = { SnackbarHost(snackbarHostState) },\n content = { padding -\u003e\n Button(\n modifier = Modifier.padding(padding),\n onClick = {\n scope.launch {\n snackbarHostState.showSnackbar(\n message = \"1 item removed\",\n actionLabel = \"UNDO\",\n duration = SnackbarDuration.Short\n ).run {\n when (this) {\n Dismissed -\u003e Log.d(\"SNACKBAR\", \"Dismissed\")\n ActionPerformed -\u003e Log.d(\"SNACKBAR\", \"UNDO CLICKED\")\n }\n }\n }\n }\n ) { Text(\"Show snackbar\") }\n }\n )\n }\n }\n }\n \n```\n| **Note:** A `Snackbar` automatically goes away after a short time, so the user might not see the message or have a chance to tap the button. For this reason, offer other ways to perform `Snackbar` actions."]]