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

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

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

תמונה שמציגה סרגל אינטראקטיבי עם לחצן פעולה לביטול
איור 1. 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();
אם אתם משתמשים ב-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") }
                  }
              )
          }
      }
  }