La funzionalità Riepilogo semplifica la gestione dell'interazione utente tramite le classi Action
. Le classi Action
di Glance definiscono le azioni che un utente può eseguire e puoi specificare l'operazione eseguita in risposta all'azione. Puoi applicare un Action
a qualsiasi componente con il metodo GlanceModifier.clickable
.
I widget delle app si trovano in un processo remoto, quindi le azioni sono definite al momento della creazione e l'esecuzione avviene nel processo remoto. Per la modalità nativa RemoteViews
,
questa operazione viene eseguita tramite PendingIntents
.
In questa pagina sono descritte le seguenti azioni:
Avvia un'attività
Per avviare un'attività al momento dell'interazione dell'utente, fornisci la funzione actionStartActivity
a un Button
o a un altro componibile tramite il modificatore GlanceModifier.clickable
(..).
Specifica uno dei seguenti valori in actionStartActivity
:
- La classe di attività target
- La
ComponentName
- Un intent
Glance converte l'azione in un valore PendingIntent
con il target e i parametri forniti. Nell'esempio seguente, NavigationActivity
viene avviato quando un utente fa clic sul pulsante:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MainActivity>() ) }
Avviare un servizio
Analogamente all'avvio di un'attività, avvia un servizio all'interazione dell'utente utilizzando uno
dei metodi di actionStartService
.
Specifica uno dei seguenti valori in actionStartService
:
- La classe di attività target
- La
ComponentName
- Un intent
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Inviare un evento di trasmissione
Invia un evento di trasmissione su interazione utente utilizzando uno dei metodi actionSendBroadcast
:
Specifica uno dei seguenti valori in actionSendBroadcast
:
- Azione stringa
- La
ComponentName
- Un intent
BroadcastReceiver
corso
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Esegui azioni personalizzate
Anziché avviare un target specifico, Glance può utilizzare un'azione lambda o actionRunCallback
per eseguire un'azione, ad esempio aggiornare l'interfaccia utente o lo stato al momento dell'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 al modificatore GlanceModifier.clickable
:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
In alternativa, passalo al parametro onClick
per i componibili che lo supportano:
Button( text = "Submit", onClick = { submitData() } )
Esegui ActionCallback
In alternativa, utilizza i metodi actionRunCallback
per eseguire un'azione
sull'interazione dell'utente. A questo scopo, fornisci un'implementazione personalizzata di
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, viene richiamato il metodo suspend onAction
dell'elemento ActionCallback
fornito, eseguendo la logica definita (ovvero richiedendo i dati di aggiornamento).
Per aggiornare il widget dopo l'esecuzione dell'azione, crea una nuova istanza e chiama update
(..). Per ulteriori 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 i parametri alle azioni
Per fornire ulteriori informazioni a un'azione, utilizza l'API ActionParameters
per creare una coppia chiave-valore digitata. Ad esempio, per definire la destinazione
su cui è stato fatto clic:
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() } } }
Al di sotto, i parametri sono inclusi nell'intent utilizzato per avviare l'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 l'elemento Parameters.Key
definito 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 // ... } }