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

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

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

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

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

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. מצרפים את מאזין לפני שמתקשרים 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") }
                  }
              )
          }
      }
  }