โต้ตอบกับการ์ด

ไทล์ทําได้มากกว่าแค่แสดงข้อมูล แต่ยังโต้ตอบได้ด้วย หากต้องการให้องค์ประกอบ เช่น textButton() ตอบสนองต่อการแตะ ให้สร้างตัวแฮนเดิลการคลิกโดยใช้ clickable() และเชื่อมโยงกับองค์ประกอบเลย์เอาต์

คุณกําหนดค่า Clickable ให้ทริกเกอร์การดําเนินการได้ 2 วิธีหลัก ดังนี้

  1. เปิดกิจกรรมโดยตรง: ใช้ launchAction() ในกรณีที่คุณต้องเปิดกิจกรรมทันที
  2. มอบสิทธิ์ให้บริการไทล์: ใช้ loadAction() เพื่อเรียกใช้ตรรกะภายใน TileService วิธีนี้เป็นวิธีที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้คุณรีเฟรชเนื้อหาของการ์ด อัปเดตสถานะ หรือเปิดใช้งานกิจกรรมที่ซับซ้อนมากขึ้นได้

เปิดกิจกรรมที่ส่งออก

หากการแตะของผู้ใช้ควรเปิดใช้งานกิจกรรมทันที ให้ใช้ launchAction() ระบุ ComponentName เพื่อระบุกิจกรรม ต้องส่งออกกิจกรรม วิธีการนี้ช่วยให้คุณส่งข้อมูลเพิ่มเติม Intent รายการไปกับการดำเนินการได้ อย่างไรก็ตาม คุณจะตั้งค่า Flag Intent ที่กำหนดเองไม่ได้

ตัวอย่างต่อไปนี้แสดงวิธีสร้าง Clickable เพื่อเปิด TileActivity พร้อมด้วย Extra 2 รายการ ได้แก่ name และ age

textButton(
    labelContent = {
        text("launchAction()".layoutString, typography = BODY_LARGE)
    },
    onClick =
    clickable(
        action =
        launchAction(
            ComponentName(
                "com.example.wear",
                "com.example.wear.snippets.m3.tile.TileActivity",
            ),
            mapOf(
                "name" to ActionBuilders.stringExtra("Bartholomew"),
                "age" to ActionBuilders.intExtra(21),
            ),
        )
    ),
)

ในกิจกรรมที่เปิด ให้ดึงค่าจากข้อมูลเสริมของ Intent ดังนี้

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // When this activity is launched from the tile InteractionLaunchAction,
    // "name" will be "Bartholomew" and "age" will be 21
    val name = intent.getStringExtra("name")
    val age = intent.getStringExtra("age")

    // ...
}

จัดการการโต้ตอบในบริการข้อมูลแผนที่

หากต้องการการโต้ตอบที่ยืดหยุ่นมากขึ้น ให้ใช้ loadAction() เมื่อผู้ใช้แตะองค์ประกอบที่กําหนดค่าด้วย loadAction ระบบจะเรียกใช้ TileService.onTileRequest() อีกครั้ง ซึ่งจะช่วยให้คุณเรียกใช้ตรรกะในบริการเพื่ออัปเดตการ์ด เปลี่ยนสถานะ และทํางานที่ซับซ้อนมากขึ้นได้

รีเฟรชเนื้อหาของการ์ด

การใช้ loadAction ที่ง่ายที่สุดคือส่งสัญญาณการรีเฟรช เรียก loadAction โดยไม่มีอาร์กิวเมนต์ เมื่อแตะ ระบบจะเรียก onTileRequest() ซึ่งจะช่วยให้บริการแสดงเลย์เอาต์ใหม่ที่มีเนื้อหาที่อัปเดต

textButton(
    onClick = clickable(loadAction()),
    labelContent = { text("Refresh".layoutString)