在訊息中加入動作

試用 Compose
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中新增通知。

您可以在 Snackbar 讓使用者回覆訊息。這樣做時 Snackbar 會在訊息文字旁邊新增按鈕,方便使用者 輕觸按鈕觸發動作。舉例來說,電子郵件應用程式可能會 「電子郵件已封存」部分會顯示「復原」按鈕撰寫新的電子郵件訊息如果使用者輕觸 [復原] 按鈕時,應用程式會將電子郵件移出封存。

顯示含有 UNDO 動作按鈕的 Snackbar 圖片
圖 1:含有復原動作按鈕的 Snackbar 還原已移除的項目

如要在 Snackbar 訊息中新增動作,請定義事件監聽器物件 會導入 View.OnClickListener 存取 API系統會呼叫事件監聽器的 onClick() 方法。舉例來說,下列程式碼片段顯示 復原動作的接聽程式:

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

請使用下列其中一個值: setAction() 方法,將事件監聽器附加到 Snackbar。將 才能 show(), 如以下程式碼範例所示:

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();
使用 Jetpack Compose 時,可以顯示 SnackbarHost, 如以下範例所示:

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") }
                  }
              )
          }
      }
  }