0

J'essaie de comprendre cela depuis un moment maintenant, et je suis juste devenu de plus en plus confus.Faut-il utiliser une activité ou un service lorsque vous utilisez un bouton dans un widget?

J'ai fait un widget Android qui affiche deux articles (titre + image). En plus de cela, j'ai des boutons pour basculer en arrière et en avant à travers les articles. Qu'est-ce que je ne comprends pas, c'est comment je peux changer les Widgets RemoteViews lorsque les boutons sont pressés. Ce qui devrait être l'une des opérations les plus élémentaires dans un widget, cependant, je n'arrive pas à le comprendre.

Alors ...

  • Puis-je faire avec juste un OnClickListener dans le AppWidgetProvider?

  • Ou dois-je créer une activité sans fenêtre (visibility = false)?

Veuillez excuser ma stupidité. C'est probablement très basique.

Répondre

0

Je ne pense pas que ce soit basique du tout - c'est quelque chose que j'ai pensé pendant un moment en relation avec l'application Headset Blocker que j'ai écrite, qui est juste un widget que vous activez/désactivez. J'ai fini par regarder à travers le code source de Google pour ce qu'ils ont fait. La réponse est d'utiliser la nature du récepteur AppWidget pour recevoir des mises à jour via setOnClickPendingIntent(). Puis dans onReceive(), vous réagissez différemment à vos propres clics que quelqu'un qui essaie de créer un widget. You can see a sample of what I did in the Headset Blocker source.

En fin de compte, une activité ou un service est trop lourd pour ce que vous voulez. Utiliser le même BroadcastReceiver que le widget d'application lui-même est beaucoup mieux.

+0

"En fin de compte, une activité ou un service est trop lourd pour ce que vous voulez." - Cela dépend de ce que vous faites. Gardez à l'esprit que 'onReceive()' d'un 'BroadcastReceiver' est appelé sur le thread de l'application principale. Si vous allez effectuer un travail important sur ce thread (plus de 300 ms, par exemple), vous devriez sérieusement envisager de déléguer ce travail à un IntentService, afin que le travail puisse être effectué avec la priorité d'arrière-plan sur un thread d'arrière-plan. – CommonsWare

+0

Assez vrai. Je suppose que cela dépend si les images title + sont récupérées lorsque l'utilisateur clique sur le widget ou s'il est mis en cache à l'avance. –

Questions connexes