איך מוסיפים פעולות להודעות

כדאי לנסות את התכונה 'כתיבה מהירה'
Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך מוסיפים התראות בחלונית הכתיבה

אתם יכולים להוסיף פעולה ל-Snackbar כדי לאפשר למשתמש להשיב להודעה. כשעושים זאת, ה-Snackbar מוסיף לחצן ליד טקסט ההודעה, והמשתמש יכול להקיש על הלחצן כדי להפעיל את הפעולה. לדוגמה, אפליקציית אימייל עשויה להציב לחצן ביטול בהודעה 'האימייל הועבר לארכיון'. אם המשתמש מקייש על הלחצן ביטול, האימייל יוחזר מהארכיון.

תמונה שבה מוצגת סרגל סטטוסים עם לחצן הפעולה 'ביטול'
איור 1. Snackbar עם לחצן הפעולה 'ביטול', שמשחזר פריט שהוסר.

כדי להוסיף פעולה להודעת Snackbar, מגדירים אובייקט מאזין שמטמיע את הממשק View.OnClickListener. המערכת קוראת לשיטה onClick() של המאזין אם המשתמש מקייש על פעולת ההודעה. לדוגמה, קטע הקוד הזה מציג מאזין לפעולת ביטול:

KotlinJava
class MyUndoListener : View.OnClickListener {

  fun onClick(v: View) {
    // Code to undo the user's last action.
  }
}
public class MyUndoListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {

        // Code to undo the user's last action.
    }
}

משתמשים באחת מהשיטות setAction() כדי לצרף את המאזין ל-Snackbar. צריך לצרף את הבורר לפני שמפעילים את show(), כפי שמתואר בדוגמת הקוד הבאה:

KotlinJava
val mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),
                               R.string.email_archived, Snackbar.LENGTH_SHORT)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
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();
אם אתם משתמשים ב-Jetpack Compose, תוכלו להציג 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") }
                  }
              )
          }
      }
  }