Thêm thao tác vào một thông báo

Thử cách Compose
Jetpack Compose là bộ công cụ giao diện người dùng được đề xuất cho Android. Tìm hiểu cách thêm thông báo trong Compose.

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ữ.

Hình ảnh cho thấy một thanh thông báo nhanh kèm theo nút hành động HUỶ
Hình 1. Snackbar có nút hành động huỷ 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 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();
Nếu đang sử dụng Jetpack Compose, bạn có thể hiển thị một 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") }
                  }
              )
          }
      }
  }