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