为消息添加操作

试用 Compose 方式
Jetpack Compose 是推荐在 Android 设备上使用的界面工具包。了解如何在 Compose 中添加通知。
<ph type="x-smartling-placeholder"></ph> 信息提示控件 →

您可以向 Snackbar 以便用户回复您的消息执行此操作后, Snackbar 会在消息文本旁边放置一个按钮,用户可以 触发您的操作。例如,电子邮件应用可能会将 “电子邮件已归档”上有一个撤消按钮消息。如果用户点按 撤消按钮,则应用会将电子邮件从归档中撤回。

一张图片,显示信息条和“撤消”操作按钮
图 1. 一个 Snackbar,带有撤消操作按钮, 恢复已移除的项。

如需向 Snackbar 消息添加操作,请定义监听器对象 实现 View.OnClickListener 界面。系统会调用监听器的 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") }
                  }
              )
          }
      }
  }
  
<ph type="x-smartling-placeholder">