ข้อมูลโดยย่อจะลดความซับซ้อนในการจัดการการโต้ตอบของผู้ใช้ผ่านชั้นเรียน Action
ข้อมูลโดยย่อ
คลาส Action
จะกำหนดสิ่งที่ผู้ใช้ดำเนินการได้ และคุณสามารถระบุ
ดำเนินการเพื่อตอบสนองต่อการทำงานนั้น คุณสามารถใช้ Action
กับ
โดยใช้เมธอด GlanceModifier.clickable
วิดเจ็ตแอปทำงานบนกระบวนการระยะไกล ดังนั้นจึงมีการกำหนดการดำเนินการขณะสร้าง
และการดำเนินการจะเกิดขึ้นในกระบวนการระยะไกล ในภาษาRemoteViews
ซึ่งดำเนินการผ่าน PendingIntents
มีการอธิบายการดำเนินการต่อไปนี้ในหน้านี้
เปิดกิจกรรม
หากต้องการเปิดกิจกรรมการโต้ตอบของผู้ใช้ ให้ระบุ
actionStartActivity
ไปยัง Button
หรือ Composable อื่นผ่านพารามิเตอร์
GlanceModifier.clickable
(..) ตัวปรับแต่ง
ระบุข้อใดข้อหนึ่งต่อไปนี้ใน actionStartActivity
- คลาสกิจกรรมเป้าหมาย
ComponentName
- ความตั้งใจ
Glance จะแปลการดําเนินการเป็น PendingIntent
พร้อมเป้าหมายที่ระบุและ
พารามิเตอร์ ในตัวอย่างต่อไปนี้ NavigationActivity
จะเปิดขึ้นเมื่อ
ผู้ใช้คลิกปุ่ม:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
เปิดบริการ
คล้ายกับการเปิดตัวกิจกรรม โดยเปิดบริการตามการโต้ตอบของผู้ใช้โดยใช้
ของเมธอด actionStartService
ระบุข้อใดข้อหนึ่งต่อไปนี้ใน actionStartService
- คลาสกิจกรรมเป้าหมาย
ComponentName
- Intent
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
ส่งกิจกรรมการออกอากาศ
ส่งกิจกรรมการออกอากาศเมื่อผู้ใช้โต้ตอบโดยใช้หนึ่งใน
actionSendBroadcast
เมธอด:
ระบุข้อใดข้อหนึ่งต่อไปนี้ใน actionSendBroadcast
- การทำงานของสตริง
ComponentName
- Intent
- ชั้นเรียน
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
ดำเนินการที่กำหนดเอง
โดย Glance สามารถใช้การดำเนินการ lambda หรือ
actionRunCallback
เพื่อดำเนินการ เช่น อัปเดต UI หรือสถานะใน
การโต้ตอบของผู้ใช้
เรียกใช้การดำเนินการ lambda
คุณสามารถใช้ฟังก์ชัน lambda เป็นการเรียกกลับในการโต้ตอบกับ UI ได้
เช่น ส่งฟังก์ชัน lambda ไปยัง GlanceModifier.clickable
ตัวปรับแต่ง:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
หรือส่งไปยังพารามิเตอร์ onClick
ใน Composable ที่รองรับ ดังนี้
Button( text = "Submit", onClick = { submitData() } )
เรียกใช้ ActionCallback
หรือใช้เมธอด actionRunCallback
เพื่อดำเนินการกับ
การโต้ตอบของผู้ใช้ ในการดำเนินการ โปรดระบุการใช้งาน
ActionCallback
:
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
เมื่อคลิกของผู้ใช้ วิธี suspend onAction
จากที่ระบุ
จะเรียก ActionCallback
โดยดำเนินการตามตรรกะที่กำหนดไว้ (นั่นคือ การเรียก
รีเฟรชข้อมูล)
หากต้องการอัปเดตวิดเจ็ตหลังจากดำเนินการแล้ว ให้สร้างอินสแตนซ์ใหม่และ
โทรหา update
(..) โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อจัดการสถานะ GlanceAppWidget
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
ระบุพารามิเตอร์ให้กับการดำเนินการ
หากต้องการให้ข้อมูลเพิ่มเติมสำหรับการดำเนินการ ให้ใช้ ActionParameters
API สำหรับสร้างคู่คีย์-ค่าที่พิมพ์ ตัวอย่างเช่น หากต้องการระบุการคลิกที่
ปลายทาง:
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
ที่ด้านล่าง พารามิเตอร์จะรวมอยู่ใน Intent ที่ใช้ในการเปิดใช้งาน ซึ่งช่วยให้กิจกรรมเป้าหมายดึงข้อมูลได้
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
จะมีพารามิเตอร์ให้กับ ActionCallback
ด้วย ใช้
Parameters.Key
เพื่อดึงค่า:
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }