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.

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
class MyUndoListener : View.OnClickListener { fun onClick(v: View) { // Code to undo the user's last action. } }
Java
public class MyUndoListener implements View.OnClickListener { @Override public void onClick(View v) { // 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:
Kotlin
val mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT) mySnackbar.setAction(R.string.undo_string, MyUndoListener()) mySnackbar.show()
Java
Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT); mySnackbar.setAction(R.string.undo_string, new MyUndoListener()); mySnackbar.show();
SnackbarHost
, come mostrato nell'esempio seguente:
Kotlin
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") } } ) } } }