Il Riepilogo semplifica la gestione dell'interazione dell'utente tramite le classi Action
. Riepilogo
Le classi Action
definiscono le azioni che un utente può eseguire e tu puoi specificare
dell'operazione eseguita in risposta all'azione. Puoi applicare un Action
a qualsiasi
con il metodo GlanceModifier.clickable
.
I widget delle app si trovano in un processo remoto, quindi le azioni vengono definite al momento della creazione
e l'esecuzione avviene nel processo remoto. Nel formato nativo RemoteViews
,
tramite PendingIntents
.
In questa pagina sono descritte le seguenti azioni:
di Gemini Advanced.Lanciare un'attività
Per avviare un'attività in seguito all'interazione dell'utente, fornisci la
actionStartActivity
a un Button
o a un altro componibile tramite
Modificatore GlanceModifier.clickable
(..).
Fornisci uno dei seguenti documenti in actionStartActivity
:
- Classe attività target
- La
ComponentName
- Un'intenzione
Riepilogo traduce l'azione in un PendingIntent
con il target fornito e
parametri. Nell'esempio seguente, NavigationActivity
viene avviato quando un
l'utente fa clic sul pulsante:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Avvia un servizio
Analogamente al lancio di un'attività, avvia un servizio al momento dell'interazione dell'utente utilizzando
dei metodi actionStartService
.
Fornisci uno dei seguenti documenti in actionStartService
:
- Classe attività target
- La
ComponentName
- Un'intenzione
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Invia un evento di trasmissione
Invia un evento di trasmissione in seguito all'interazione dell'utente utilizzando uno dei
Metodi di actionSendBroadcast
:
Fornisci uno dei seguenti documenti in actionSendBroadcast
:
- Azione stringa
- La
ComponentName
- Un'intenzione
- Corso
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Eseguire azioni personalizzate
Anziché lanciare un target specifico, Riepilogo può utilizzare un'azione lambda o
actionRunCallback
per eseguire un'azione, ad esempio aggiornare l'interfaccia utente o lo stato su
interazione dell'utente.
Esegui azioni lambda
Puoi utilizzare le funzioni lambda come callback per le interazioni dell'interfaccia utente.
Ad esempio, passa la funzione lambda a GlanceModifier.clickable
modificatore:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
In alternativa, passala al parametro onClick
sui componibili che la supportano:
Button( text = "Submit", onClick = { submitData() } )
Esegui ActionCallback
In alternativa, utilizza i metodi actionRunCallback
per eseguire un'azione
interazione dell'utente. Per farlo, fornisci un'implementazione personalizzata
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 } }
Al clic dell'utente, il metodo suspend onAction
del metodo
Viene chiamato ActionCallback
eseguendo la logica definita (ad es. richiedendo
aggiornare i dati).
Per aggiornare il widget dopo l'esecuzione dell'azione, crea una nuova istanza e
chiama update
(..). Per maggiori dettagli, consulta la sezione Gestire lo stato di 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) } }
Fornire parametri alle azioni
Per fornire informazioni aggiuntive a un'azione, utilizza ActionParameters
API per creare una coppia chiave-valore digitata. Ad esempio, per definire il tipo di
destinazione:
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() } } }
Sotto, i parametri sono inclusi nell'intent utilizzato per avviare attività, consentendo all'attività target di recuperarla.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
I parametri vengono forniti anche a ActionCallback
. Utilizza il tipo di
Parameters.Key
per recuperare il valore:
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 // ... } }