בעזרת 'בקצרה', קל יותר לטפל באינטראקציות של משתמשים באמצעות הכיתות Action
. בקצרה
Action
מחלקות מגדירות את הפעולות שמשתמשים יכולים לבצע, ואפשר לציין את
שמבוצעת בתגובה לפעולה. אפשר להחיל Action
על כל
רכיב עם ה-method GlanceModifier.clickable
.
ווידג'טים של אפליקציות פעילים בתהליך מרוחק, כך שהפעולות מוגדרות בזמן היצירה
הזמן והביצוע מתבצע בתהליך המרוחק. בגרסה המקורית של RemoteViews
,
הפעולה מתבצעת דרך PendingIntents
.
הפעולות הבאות מתוארות בדף הזה:
התחלת פעילות
כדי להתחיל פעילות במסגרת אינטראקציה של משתמשים, צריך לספק את
הפונקציה actionStartActivity
בפונקציה Button
או תוכן קומפוזבילי אחר באמצעות
מגביל GlanceModifier.clickable
(..).
צריך לספק את אחד מהפריטים הבאים ב-actionStartActivity
:
- סיווג פעילות היעד
ComponentName
- כוונה
התכונה 'בקצרה' מתרגם את הפעולה לPendingIntent
עם היעד שצוין
. בדוגמה הבאה, NavigationActivity
מופעל כאשר
משתמש לוחץ על הלחצן:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
הפעלת שירות
בדומה להפעלת פעילות, אפשר להשיק שירות בנוגע לאינטראקציה של משתמש באמצעות שירות
מתוך השיטות actionStartService
.
צריך לספק את אחד מהפריטים הבאים ב-actionStartService
:
- סיווג פעילות היעד
ComponentName
- כוונה
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
שליחת אירוע שידור
שליחת אירוע שידור לגבי אינטראקציה של משתמש באמצעות אחד
actionSendBroadcast
אמצעי תשלום:
צריך לספק את אחד מהפריטים הבאים ב-actionSendBroadcast
:
- פעולת המחרוזת
ComponentName
- כוונה
- כיתה
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
ביצוע פעולות מותאמות אישית
במקום להפעיל יעד ספציפי, 'בקצרה' יכול להשתמש בפעולת lambda או
actionRunCallback
כדי לבצע פעולה, כמו עדכון ממשק המשתמש או המצב
לאינטראקציה של המשתמשים.
הפעלת פעולות של lambda
אפשר להשתמש בפונקציות lambda כקריאות חוזרות לאינטראקציות עם ממשק המשתמש.
לדוגמה, מעבירים את פונקציית lambda אל GlanceModifier.clickable
מגביל:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
לחלופין, מעבירים אותו לפרמטר onClick
בתכנים קומפוזביליים שתומכים בו:
Button( text = "Submit", onClick = { submitData() } )
הרצת ActionCallback
לחלופין, אפשר להשתמש ב-methods 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 } }
בקליק של המשתמש, ה-method 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 ליצירת צמד מפתח/ערך מוקלד. לדוגמה, כדי להגדיר את הקליק
destination:
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() } } }
מתחתיו, הפרמטרים נכללים בכוונה שמשמשת להפעלת מאפשר לפעילות היעד לאחזר אותה.
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 // ... } }