Bạn có thể thêm 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 thực hiện việc này, Snackbar
sẽ đặt một nút bên cạnh văn bản thông báo 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 đã lưu trữ". Nếu người dùng nhấn vào nút huỷ, ứng dụng sẽ đưa email đó ra khỏi kho lưu trữ.
Để thêm một thao tác vào thông báo Snackbar
, hãy xác định đối tượng trình nghe giúp 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 thao tác đối với thông báo. Ví dụ: đoạn mã này hiển thị một trình nghe cho một 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 gọi show()
, như minh hoạ trong mã mẫu sau:
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") } } ) } } }