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

Thử cách dùng 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 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 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ụ: ứ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ẽ lấy email đó ra khỏi tệp lưu trữ.

Hình ảnh cho thấy một thanh thông báo nhanh có 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 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 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 gọi show(), như 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();
Nếu đang sử dụng Jetpack Compose, bạn có thể hiển thị 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") }
                  }
              )
          }
      }
  }