افزودن کنش به پیام

امتحان کردن روش «نوشتن»
‫Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه افزودن اعلان در «نوشتن» آشنا شوید.

می‌توانید به 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()
اگر از 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") }
                }
            )
        }
    }
}