Cómo agregar una acción a un mensaje

Prueba el método de Compose
Jetpack Compose es el kit de herramientas de IU recomendado para Android. Obtén información para agregar notificaciones en Compose.

Puedes agregar una acción a una Snackbar para permitir que el usuario responda a tu mensaje. Cuando lo hagas, Snackbar coloca un botón junto al texto del mensaje y el usuario puede presiona el botón para activar la acción. Por ejemplo, una app de correo electrónico podría colocar Un botón para deshacer en su “correo electrónico archivado” mensaje. Si el usuario toca deshacer, la app quita el correo electrónico del archivo.

Imagen que muestra una barra de notificaciones con el botón de acción DESHACER
Figura 1: Un Snackbar con un botón para deshacer la acción que restablece un elemento eliminado.

Para agregar una acción a un mensaje Snackbar, define un objeto de escucha que implementa las View.OnClickListener interfaz de usuario. El sistema llama al receptor onClick() si el usuario presiona la acción del mensaje. Por ejemplo, este fragmento muestra un objeto de escucha para una acción de deshacer:

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

Usa uno de los setAction() para adjuntar el objeto de escucha a tu Snackbar. Adjunta el archivo de la llamada antes de llamar show(), como se indica en esta muestra 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();
Si usas Jetpack Compose, puedes mostrar un SnackbarHost, como se muestra en el siguiente ejemplo:

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