אתם יכולים להוסיף פעולה ל-Snackbar כדי לאפשר למשתמש להשיב להודעה שלכם. כשעושים את זה, Snackbar מוסיף כפתור ליד הטקסט של ההודעה, והמשתמש יכול להפעיל את הפעולה בלחיצה על הכפתור. לדוגמה, אפליקציית אימייל עשויה להציב לחצן ביטול בהודעה 'האימייל הועבר לארכיון'. אם המשתמש יקיש על הלחצן ביטול, האפליקציה תוציא את האימייל מהארכיון.
Snackbar עם כפתור לביטול פעולה שמשחזר פריט שהוסר.
כדי להוסיף פעולה להודעה Snackbar, צריך להגדיר אובייקט listener שמטמיע את הממשק View.OnClickListener. המערכת קוראת לשיטה onClick() של מאזין אם המשתמש מקיש על הצעה לפעולה. לדוגמה, בקטע הקוד הבא מוצג listener לפעולת ביטול:
Kotlin
class MyUndoListener : View.OnClickListener { fun onClick(v: View) { // Code to undo the user's last action. } }
Java
public class MyUndoListener implements View.OnClickListener { @Override public void onClick(View v) { // Code to undo the user's last action. } }
אפשר להשתמש באחת מהשיטות setAction() כדי לצרף את ה-listener ל-Snackbar. מצרפים את ה-listener לפני שמפעילים את show(), כמו בדוגמת קוד זו:
Kotlin
val mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT) mySnackbar.setAction(R.string.undo_string, MyUndoListener()) mySnackbar.show()
Java
Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT); mySnackbar.setAction(R.string.undo_string, new MyUndoListener()); mySnackbar.show();
SnackbarHost, כמו בדוגמה הבאה:
Kotlin
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") } } ) } } }