Dodawanie działania do wiadomości

Wypróbuj metodę Compose
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak dodawać powiadomienia w Compose.

Możesz dodać działanie do Snackbar , aby umożliwić użytkownikowi odpowiedź na Twoją wiadomość. Gdy to zrobisz, Snackbarumieści przycisk obok tekstu wiadomości, a użytkownik będzie mógł wywołać Twoje działanie, klikając ten przycisk. Na przykład aplikacja do poczty e-mail może umieścić przycisk Cofnij w komunikacie „E-mail został zarchiwizowany”. Jeśli użytkownik kliknie przycisk cofnij, aplikacja wycofa e-maila z archiwum.

Powiadomienie w formie paska powiadomień z przyciskiem polecenia COFNIJ
Rysunek 1. Snackbar z przyciskiem polecenia cofania, który przywraca usunięty element.

Aby dodać działanie do wiadomości Snackbar, zdefiniuj obiekt odbiornika, który implementuje interfejs View.OnClickListener. Jeśli użytkownik kliknie sugerowane działanie, system wywoła metodę detektora onClick() Na przykład ten fragment kodu pokazuje detektor działania cofania:

class MyUndoListener : View.OnClickListener {

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

Aby dołączyć odbiornik do elementu Snackbar, użyj jednej z tych metod:setAction() Dołącz odbiornik przed wywołaniem show(), jak pokazano w tym przykładowym kodzie:

val mySnackbar = Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_archived,
    Snackbar.LENGTH_SHORT
)
mySnackbar.setAction(R.string.undo_string, MyUndoListener())
mySnackbar.show()
Jeśli używasz Jetpack Compose, możesz wyświetlić SnackbarHost, jak pokazano w tym przykładzie:
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") }
                }
            )
        }
    }
}