یک اقدام به پیام اضافه کنید

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه اعلان‌ها را در Compose اضافه کنید.

شما می‌توانید یک عمل (action) به Snackbar اضافه کنید تا کاربر بتواند به پیام شما پاسخ دهد. وقتی این کار را انجام می‌دهید، Snackbar یک دکمه در کنار متن پیام قرار می‌دهد و کاربر می‌تواند با ضربه زدن روی آن دکمه، عمل شما را فعال کند. برای مثال، یک برنامه ایمیل ممکن است یک دکمه لغو (undo) روی پیام "ایمیل بایگانی شده" (email archived) خود قرار دهد. اگر کاربر دکمه لغو (undo) را بزند، برنامه ایمیل را از بایگانی خارج می‌کند.

اعلان اسنک‌بار با دکمه‌ی لغو عملیات (UNDO)
شکل ۱. یک Snackbar با دکمه‌ی لغو عملیات که آیتم حذف‌شده را بازیابی می‌کند.

برای افزودن یک اکشن به پیام Snackbar ، یک شیء شنونده تعریف کنید که رابط View.OnClickListener را پیاده‌سازی کند. اگر کاربر اکشن پیام را لمس کند، سیستم متد onClick() شنونده شما را فراخوانی می‌کند. برای مثال، این قطعه کد یک شنونده برای اکشن لغو (undo) را نشان می‌دهد:

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