Je sais que c'est possible, mais je n'arrive pas à trouver un moyen de déclencher une mise à jour de mon widget à partir de l'activité principale. N'y a-t-il pas une intention générale que je puisse diffuser?
97
Je sais que c'est possible, mais je n'arrive pas à trouver un moyen de déclencher une mise à jour de mon widget à partir de l'activité principale. N'y a-t-il pas une intention générale que je puisse diffuser?
Si vous êtes utilisez un AppWidgetProvider
, vous pouvez le mettre à jour la façon suivante :
Intent intent = new Intent(this, MyAppWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
int[] ids = AppWidgetManager.getInstance(getApplication())
.getAppWidgetIds(new ComponentName(getApplication(), MyAppWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);
widgetId
?intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Cela m'a aidé lorsque j'ai cherché comment mettre à jour un widget à partir d'un service / ou d'une action (mais cela peut être possible dans tous les contextes):
la source
Donc, pour mettre à jour un widget à partir d'une activité, vous pouvez le faire comme ceci:
Travaille pour moi :)
la source
Essaye ça:
la source
Si vous travaillez avec un widget qui utilise une collection telle que ListView, GridView ou StackView, pour mettre à jour les éléments du widget, procédez comme suit:
Avec cette méthode notifyAppWidgetViewDataChanged (), vous pouvez forcer les éléments du widget à récupérer toutes les nouvelles données en temps réel.
la source
la source
notifyAppWidgetViewDataChanged()
cela prend un tableau.La solution acceptée de Phaethon à Kotlin:
Où MyAppWidgetProvider est dérivé de AppWidgetProvider:
class MyAppWidgetProvider : AppWidgetProvider() {
la source
Si vous essayez de mettre à jour par programme le widget où vous n'avez pas accès à YourWidgetProvider.class explicitement, par exemple à partir d'un autre module ou d'une autre bibliothèque, vous pouvez capturer ce que YourWidgetProvider.class.getName () produit et créer une constante:
Vous pourrez alors l'utiliser implicitement:
la source