Bạn có thể thêm một thao tác vào Snackbar để cho phép người dùng phản hồi tin nhắn của bạn. Khi bạn làm như vậy, Snackbar sẽ đặt một nút bên cạnh văn bản tin nhắn và người dùng có thể kích hoạt hành động của bạn bằng cách nhấn vào nút. Ví dụ: một ứng dụng email có thể đặt nút huỷ trên thông báo "email đã được lưu trữ". Nếu người dùng nhấn vào nút huỷ, ứng dụng sẽ chuyển email ra khỏi kho lưu trữ.
Snackbar có nút hành động hoàn tác giúp khôi phục một mục đã xoá.
Để thêm một thao tác vào thông báo Snackbar, hãy xác định một đối tượng trình nghe triển khai giao diện View.OnClickListener. Hệ thống sẽ gọi phương thức onClick() của trình nghe nếu người dùng nhấn vào hành động cho tin nhắn. Ví dụ: đoạn mã này cho thấy một trình nghe cho thao tác huỷ:
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. } }
Sử dụng một trong các phương thức setAction() để đính kèm trình nghe vào Snackbar. Đính kèm trình nghe trước khi bạn gọi show(), như minh hoạ trong đoạn mã mẫu này:
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, như trong ví dụ sau:
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") } } ) } } }