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

Thử cách sử 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 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ữ.

Hình ảnh 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 đố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();
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") }
                  }
              )
          }
      }
  }