Adicionar uma ação a uma mensagem

Testar 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. Ao fazer isso, o Snackbar coloca um botão ao lado do texto da mensagem, e o usuário pode acionar sua ação tocando no botão. 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.

Uma imagem mostrando uma barra de informações com um botão de ação "UNDO"
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 chama 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 um SnackbarHost, conforme mostrado no exemplo abaixo:

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