Вы можете добавить действие в элемент Snackbar, чтобы пользователь мог ответить на ваше сообщение. В результате
Snackbar рядом с текстом сообщения появится кнопка, нажав на которую пользователь сможет
выполнить ваше действие. Например, в почтовом приложении кнопка Отменить может быть добавлена в сообщение "Письмо отправлено в архив". Если пользователь нажмет кнопку Отменить, приложение вернет письмо из архива.
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()
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") } } ) } } }