J'essaie d'ajouter un widget à l'application launcher3 qui prend les données d'un fournisseur de contenu en cours d'exécution dans un processus séparé et l'affiche dans une liste dans le widget. Le widget doit mettre à jour ses éléments listview chaque fois que les données contentprovider sont modifiées. Je cherche quelques échantillons pour comprendre comment cela fonctionne. Est-ce que quelqu'un peut me pointer vers des liens ou des échantillons pour cela?Mise à jour du widget d'application Android basé sur le changement de données contentprovider
1
A
Répondre
1
Vous devez déclencher manuellement une mise à jour. Une façon de faire est d'envoyer une intention de diffusion à votre AppWidgetProvider
.
public class MyAppWidgetProvider extends AppWidgetProvider {
private static final String REFRESH_ACTION = "com.mypackage.appwidget.action.REFRESH";
public static void sendRefreshBroadcast(Context context) {
Intent intent = new Intent(REFRESH_ACTION);
intent.setComponent(new ComponentName(context, MyAppWidgetProvider.class));
context.sendBroadcast(intent);
}
@Override
public void onReceive(final Context context, Intent intent) {
final String action = intent.getAction();
if (REFRESH_ACTION.equals(action)) {
// refresh all your widgets
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
ComponentName cn = new ComponentName(context, ScheduleWidgetProvider.class);
mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn), R.id.widget_list);
}
super.onReceive(context, intent);
}
...
}
Lorsque les données qui sont affichées par vos modifications widget app, votre ContentProvider
pouvez simplement appeler MyAppWidgetProvider.sendRefreshBroadcast(getContext())
.
Savez-vous comment mettre à jour la vue d'un widget? –
Oui, je suis l'exemple ici - https://developer.android.com/guide/topics/appwidgets/index.html mais j'ai besoin de plus de détails sur la façon de faire la mise à jour de widget lorsque les données de contentprovider change. – Ravs