Adicionar uma ação a uma mensagem

Teste o Compose
O Jetpack Compose é o kit de ferramentas de interface recomendado para Android. Aprenda a adicionar notificações no Compose.

Você pode adicionar uma ação a um Snackbar para permitir que o usuário responda à sua mensagem. Quando você faz isso, o Snackbar coloca um botão ao lado do texto da mensagem, e o usuário pode acionar sua ação tocando nele. Por exemplo, um app de e-mails pode colocar um botão desfazer na mensagem "e-mail arquivado". Se o usuário tocar no botão desfazer, o app removerá o e-mail do arquivo.

Imagem que mostra uma snackbar com um botão de ação "DESFAZER"
Figura 1. Um Snackbar com um botão de ação de desfazer que restaura um item removido.

Para adicionar uma ação a uma mensagem Snackbar, defina um objeto listener que implemente a interface View.OnClickListener. O sistema chamará o método onClick() do listener se o usuário tocar na ação da mensagem. Por exemplo, este snippet mostra um listener para uma ação de desfazer:

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.
    }
}

Use um dos métodos setAction() para anexar o listener ao Snackbar. Anexe o listener antes de chamar show(), conforme mostrado neste exemplo de código:

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 você estiver usando o Jetpack Compose, poderá mostrar uma SnackbarHost, conforme mostrado no exemplo a seguir:

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