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 l'email dall'archivio.
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:
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 il listener a 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") } } ) } } }