Aktion einer Nachricht hinzufügen

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

Sie können einerSnackbareine Aktion hinzufügen, damit der Nutzer auf Ihre Nachricht reagieren kann. Wenn Sie das tun, wird mit dem Snackbar eine Schaltfläche neben dem Nachrichtentext eingefügt. Der Nutzer kann Ihre Aktion auslösen, indem er auf die Schaltfläche tippt. Eine E‑Mail-App könnte beispielsweise einen Rückgängig-Button in die Meldung „E‑Mail archiviert“ einfügen. Wenn der Nutzer auf die Schaltfläche Rückgängig tippt, wird die E‑Mail aus dem Archiv entfernt.

Snackbar-Benachrichtigung mit einem Aktionsbutton zum Rückgängigmachen
Abbildung 1. Ein 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 View.OnClickListener-Schnittstelle implementiert. Das System ruft die Methode onClick() des Listeners auf, wenn der Nutzer auf die nachrichtenbasierte Aktion tippt. In diesem Snippet sehen Sie beispielsweise einen Listener für eine Rückgängig-Aktion:

class MyUndoListener : View.OnClickListener {

    override fun onClick(v: View) {
        // Code to undo the user's last action.
    }
}

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

val mySnackbar = Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_archived,
    Snackbar.LENGTH_SHORT
)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
Wenn Sie Jetpack Compose verwenden, können Sie ein SnackbarHost anzeigen, wie im folgenden Beispiel gezeigt:
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") }
                }
            )
        }
    }
}