Aktion einer Nachricht hinzufügen

Compose-Methode verwenden
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zum Hinzufügen von Benachrichtigungen in Compose

Sie können einer Snackbar eine Aktion hinzufügen, damit der Nutzer auf Ihre Nachricht reagieren kann. In diesem Fall wird in der Snackbar neben dem Nachrichtentext eine Schaltfläche angezeigt, über die der Nutzer die Aktion auslösen kann. In einer E-Mail-App könnte beispielsweise in der Nachricht „E-Mail archiviert“ eine Schaltfläche Rückgängig machen angezeigt werden. Wenn der Nutzer auf die Schaltfläche Rückgängig machen tippt, wird die E-Mail wieder aus dem Archiv entfernt.

Bild einer Snackbar mit der Schaltfläche „Rückgängig“
Abbildung 1. Eine Snackbar mit einem Aktionsbutton zum Rückgängigmachen, mit dem ein entferntes Element wiederhergestellt wird.

Wenn Sie einer Snackbar-Nachricht eine Aktion hinzufügen möchten, definieren Sie ein Listener-Objekt, das die Schnittstelle View.OnClickListener implementiert. Das System ruft die Methode onClick() des Listeners auf, wenn der Nutzer auf die Nachrichtenaktion tippt. Dieses Snippet zeigt beispielsweise einen Listener für eine Aktion zum Rückgängigmachen:

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.
    }
}

Verwenden Sie eine der Methoden setAction(), um den Listener an die Snackbar anzuhängen. Hängen Sie den Listener an, bevor Sie show() aufrufen, wie in diesem Codebeispiel zu sehen:

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();
Wenn Sie Jetpack Compose verwenden, können Sie einen SnackbarHost, anzeigen, wie im folgenden Beispiel zu sehen:

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") }
                  }
              )
          }
      }
  }