Aggiungere un'azione a un messaggio

Prova Compose
Jetpack Compose è il toolkit per la UI 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 l'email dall'archivio.

Un'immagine che mostra una snackbar con un pulsante di azione ANNULLA
Figura 1. Un 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();
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") }
                  }
              )
          }
      }
  }