Snackbar にアクションを追加して、ユーザーがメッセージに返信できるようにすることができます。この場合、Snackbar はメッセージ テキストの横にボタンを配置します。ユーザーはボタンをタップしてアクションをトリガーできます。たとえば、メールアプリでは、[メールをアーカイブしました] というメッセージに [元に戻す] ボタンが表示されることがあります。ユーザーが [元に戻す] ボタンをタップすると、アプリはメールをアーカイブから取り出します。
Snackbar。Snackbar メッセージにアクションを追加するには、View.OnClickListener インターフェースを実装するリスナー オブジェクトを定義します。ユーザーがメッセージ アクションをタップすると、システムはリスナーの onClick() メソッドを呼び出します。たとえば、次のスニペットは取り消しアクションのリスナーを示しています。
class MyUndoListener : View.OnClickListener { override fun onClick(v: View) { // Code to undo the user's last action. } }
setAction() メソッドのいずれかを使用して、リスナーを Snackbar にアタッチします。次のコードサンプルに示すように、show() を呼び出す前にリスナーをアタッチします。
val mySnackbar = Snackbar.make( findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT ) mySnackbar.setAction(R.string.undo_string, MyUndoListener()) mySnackbar.show()
SnackbarHost を表示できます。
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") } } ) } } }