Bạn có thể thêm một hành động vào
Snackbar
cho phép người dùng trả lời thông báo của bạn. Khi bạn làm như vậy,
Snackbar
đặt một nút bên cạnh nội dung tin nhắn và người dùng có thể
kích hoạt hành động bằng cách nhấn vào nút đó. Ví dụ: một ứng dụng email có thể đặt
nút hoàn tác trên "email đã được lưu trữ" . Nếu người dùng nhấn vào
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 một đối tượng trình nghe
triển khai
View.OnClickListener
. Hệ thống gọi
onClick()
nếu người dùng nhấn vào hành động đối với tin nhắn. Ví dụ: đoạn mã này hiển thị
trình nghe 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
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 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") } } ) } } }