Aggiungere un'azione a un messaggio

Prova la funzionalità Scrivi
Jetpack Compose è il toolkit per l'interfaccia utente 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 nuovamente l'email dall'archivio.

Un'immagine che mostra una barra di notifica con un pulsante di azione ANNULA
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

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();
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") }
                  }
              )
          }
      }
  }