2016-05-24 1 views
1

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

+0

Savez-vous comment mettre à jour la vue d'un widget? –

+0

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

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()).