Dodawanie działania do wiadomości

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak dodawać powiadomienia w funkcji tworzenia wiadomości

Działanie można dodać do Snackbar aby użytkownik mógł odpowiedzieć na Twoją wiadomość. Wtedy parametr Snackbar umieszcza przycisk obok tekstu wiadomości, a użytkownik może wywołasz działanie, klikając przycisk. Na przykład aplikacja do poczty e-mail może umieścić przycisk cofania w sekcji „E-mail został zarchiwizowany”. . Jeśli użytkownik kliknie ikonę cofnij, aplikacja usunie e-maila z archiwum.

Obraz przedstawiający pasek powiadomień z przyciskiem COFNIJ działanie
Rysunek 1. Snackbar z przyciskiem cofania działania, przywraca usunięty element.

Aby dodać działanie do wiadomości Snackbar, zdefiniuj obiekt detektora który stosuje View.OnClickListener za pomocą prostego interfejsu online. System wywołuje onClick() jeśli użytkownik kliknie wiadomość. Na przykład ten fragment zawiera detektor cofnięcia działania:

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 setAction() aby podłączyć detektor do urządzenia Snackbar. Załącz nasłuchu, zanim zadzwonisz show(), Jak widać 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świetlać SnackbarHost, jak 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") }
                  }
              )
          }
      }
  }