เพิ่มการดำเนินการลงในข้อความ

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีเพิ่มการแจ้งเตือนในฟีเจอร์เขียน

คุณเพิ่มการดำเนินการในSnackbar เพื่ออนุญาตให้ผู้ใช้ตอบกลับข้อความของคุณได้ เมื่อทำเช่นนี้ Snackbar จะวางปุ่มไว้ข้างข้อความ และผู้ใช้จะ เรียกใช้การดำเนินการของคุณได้โดยแตะปุ่ม เช่น แอปอีเมลอาจใส่ปุ่มเลิกทำในข้อความ "เก็บอีเมล" หากผู้ใช้แตะปุ่ม ยกเลิก แอปจะนำอีเมลออกจากที่เก็บ

การแจ้งเตือนแถบแสดงข้อความพร้อมปุ่มดำเนินการเลิกทำ
รูปที่ 1 Snackbar พร้อมปุ่มดำเนินการเลิกทำที่ กู้คืนรายการที่นำออก

หากต้องการเพิ่มการดำเนินการไปยังข้อความ Snackbar ให้กำหนดออบเจ็กต์ Listener ที่ใช้ อินเทอร์เฟซ View.OnClickListener ระบบจะเรียกใช้เมธอด onClick() ของ Listener หากผู้ใช้แตะการดำเนินการที่แนะนำ เช่น ข้อมูลโค้ดนี้แสดง เครื่องมือฟังสำหรับการดำเนินการเลิกทำ

class MyUndoListener : View.OnClickListener {

    override fun onClick(v: View) {
        // Code to undo the user's last action.
    }
}

ใช้วิธีใดวิธีหนึ่งต่อไปนี้ setAction() เพื่อแนบ Listener กับ 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()
หากใช้ Jetpack Compose คุณจะแสดง 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") }
                }
            )
        }
    }
}