אתם יכולים להוסיף פעולה לSnackbar כדי לאפשר למשתמש להשיב להודעה. כשעושים את זה, Snackbar מוסיף לחצן ליד הטקסט של ההודעה, והמשתמש יכול להפעיל את הפעולה בלחיצה על הלחצן. לדוגמה, באפליקציית אימייל יכול להיות לחצן ביטול בהודעה 'האימייל הועבר לארכיון'. אם המשתמש יקיש על הלחצן ביטול, האפליקציה תוציא את האימייל מהארכיון.
Snackbar עם כפתור לביטול פעולה שמשחזר פריט שהוסר.
כדי להוסיף פעולה להודעה Snackbar, מגדירים אובייקט listener שמטמיע את הממשק View.OnClickListener. המערכת קוראת לשיטה onClick() של מאזין אם המשתמש מקיש על הצעה לפעולה. לדוגמה, בקטע הקוד הבא מוצג listener לפעולת ביטול:
class MyUndoListener : View.OnClickListener { override fun onClick(v: View) { // Code to undo the user's last action. } }
אפשר להשתמש באחת מהשיטות של setAction() כדי לצרף את מאזין האירועים ל-Snackbar. מצרפים את ה-listener לפני שמפעילים את 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") } } ) } } }