Dodawanie działania do wiadomości

Wypróbuj tworzenie wiadomości
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak dodawać powiadomienia w sekcji Redagowanie.

Możesz dodać do Snackbar działanie, aby umożliwić użytkownikowi odpowiedź na Twoją wiadomość. 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 poczty e-mail może dodać przycisk cofnij do wiadomości „e-mail zarchiwizowany”. Jeśli użytkownik kliknie przycisk Cofnij, aplikacja przywróci e-maila do archiwum.

Obraz pokazujący pasek z przyciskiem Cofnij
Rysunek 1. Snackbar z przyciskiem cofnięcia, który przywraca usunięty element.

Aby dodać działanie do wiadomości Snackbar, zdefiniuj obiekt listenera, który implementuje interfejs View.OnClickListener. Jeśli użytkownik kliknie działanie wiadomości, system wywoła metodę onClick() listenera. Ten fragment kodu pokazuje na przykład listenera dla działania cofnięcia:

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

Aby dołączyć listenera do Snackbar, użyj jednej z tych metod:setAction(). Dołącz listenera przed wywołaniem funkcji show(), jak w tym przykładzie kodu:

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