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.
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();
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") } } ) } } }