ไทล์ทําได้มากกว่าแค่แสดงข้อมูล แต่ยังโต้ตอบได้ด้วย
หากต้องการให้องค์ประกอบ เช่น textButton() ตอบสนองต่อการแตะ ให้สร้างตัวแฮนเดิลการคลิกโดยใช้ clickable() และเชื่อมโยงกับองค์ประกอบเลย์เอาต์
คุณกําหนดค่า Clickable ให้ทริกเกอร์การดําเนินการได้ 2 วิธีหลัก ดังนี้
- เปิดกิจกรรมโดยตรง: ใช้
launchAction()ในกรณีที่คุณต้องเปิดกิจกรรมทันที - มอบสิทธิ์ให้บริการไทล์: ใช้
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)