Cómo agregar una acción a un mensaje

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

Puedes agregar una acción a un objeto Snackbar para permitir que el usuario responda tu mensaje. Cuando lo haces, Snackbar coloca un botón junto al texto del mensaje, y el usuario puede activar tu acción presionando el botón. Por ejemplo, una app de correo electrónico podría colocar un botón de deshacer en su mensaje "Correo electrónico archivado". Si el usuario presiona el botón Deshacer, la app quitará el correo electrónico del archivo.

Notificación de barra de notificaciones con un botón de acción DESHACER
Figura 1: Un Snackbar con un botón de acción para deshacer que restaura un elemento quitado.

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

class MyUndoListener : View.OnClickListener {

    override fun onClick(v: View) {
        // Code to undo the user's last action.
    }
}

Usa uno de los métodos setAction() para adjuntar el objeto de escucha a tu Snackbar. Adjunta el objeto de escucha antes de llamar a show(), como se muestra en esta muestra de código:

val mySnackbar = Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_archived,
    Snackbar.LENGTH_SHORT
)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
Si usas Jetpack Compose, puedes mostrar un SnackbarHost, como se muestra en el siguiente ejemplo:
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") }
                }
            )
        }
    }
}