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 przy tekście wiadomości przycisk, 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 cofania w komunikacie „E-mail został zarchiwizowany”. Jeśli użytkownik naciśnie przycisk cofnij, aplikacja wyjmie e-maila z archiwum.

Obraz przedstawiający pasek 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ę onClick() słuchacza. Ten fragment kodu pokazuje na przykład detektor działania cofania:

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

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

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();
Jeśli używasz Jetpack Compose, możesz wyświetlić SnackbarHost, jak pokazano w tym przykładzie:

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