Aggiungere un'azione a un messaggio

Prova la modalità Scrivi
Jetpack Compose è il toolkit dell'interfaccia utente consigliato per Android. Scopri come aggiungere notifiche in Compose.

Puoi aggiungere un'azione a Snackbar per consentire all'utente di rispondere al tuo messaggio. Quando lo fai, l'Snackbar inserisce un pulsante accanto al testo del messaggio e l'utente può attivare l'azione toccandolo. Ad esempio, un'app email potrebbe inserire un pulsante di annullamento nel messaggio "Email archiviata". Se l'utente tocca il pulsante Annulla, l'app ripristina le email dall'archivio.

Un'immagine che mostra una snackbar con un pulsante di azione ANNULLA
Figura 1. Un elemento 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 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 setAction() metodi per collegare il listener a Snackbar. Allega l'ascoltatore 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();
Se utilizzi Jetpack Compose, puoi mostrare un 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") }
                  }
              )
          }
      }
  }