Добавить действие к сообщению

Попробуйте способ создания композиций.
Jetpack Compose — рекомендуемый набор инструментов для создания пользовательского интерфейса для Android. Узнайте, как добавлять уведомления в Compose.

Вы можете добавить действие в Snackbar , чтобы пользователь мог ответить на ваше сообщение. В этом случае Snackbar разместит кнопку рядом с текстом сообщения, и пользователь сможет запустить действие, нажав на эту кнопку. Например, почтовое приложение может добавить кнопку отмены для сообщения «письмо в архиве». Если пользователь нажмет кнопку отмены , приложение удалит письмо из архива.

Уведомление в Snackbar с кнопкой отмены действия.
Рисунок 1. Snackbar с кнопкой отмены действия, которая восстанавливает удаленный элемент.

Чтобы добавить действие к сообщению Snackbar , определите объект-слушатель, реализующий интерфейс View.OnClickListener . Система вызывает метод onClick() вашего слушателя, если пользователь нажимает на действие в сообщении. Например, этот фрагмент кода показывает слушатель для действия отмены:

class MyUndoListener : View.OnClickListener {

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

Используйте один из методов setAction() для прикрепления обработчика событий к вашему Snackbar . Прикрепите обработчик событий перед вызовом show() , как показано в этом примере кода:

val mySnackbar = Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_archived,
    Snackbar.LENGTH_SHORT
)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
Если вы используете Jetpack Compose , вы можете отобразить SnackbarHost , как показано в следующем примере:
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") }
                }
            )
        }
    }
}