Android appwidget listview nicht aktualisiert

Ich habe ein AppWidget geschrieben, das einige Daten in einem ListView von einem ContentProvider anzeigt, aber ich habe Schwierigkeiten, es zu aktualisieren. Wenn ich zum ersten Mal das Widget erstellen, wird es richtig gefüllt, aber nach dem Ankommen des AlarmManagers kommt kein Update auf der ListView. Hier ist der Code:

Intent update = new Intent(context, MenuWidgetProvider.class); update.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); PendingIntent pIUpdate = PendingIntent.getBroadcast(context, 0, update, 0); ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)). set(AlarmManager.RTC, nextTime.toMillis(false), pIUpdate); Log.d(TAG, "updating: " + dmt.mealName); for (int i = 0; i < appWidgetIds.length; ++i) { int widgetId = appWidgetIds[i]; RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_menu); // meal name views.setTextViewText(R.id.widget_locname, prefs.getString(PREF_WIDGET_LOCNAME, "")); // adapter Intent adapter = new Intent(context, MenuWidgetAdapterService.class); adapter.putExtra(EXTRA_LOCATIONID, prefs.getInt(PREF_WIDGET_LOCID, -1)); adapter.putExtra(EXTRA_MEALNAME, dmt.mealName); adapter.putExtra(EXTRA_DATE, dmt.date.toString()); views.setRemoteAdapter(R.id.widget_list, adapter); // update manager.updateAppWidget(widgetId, views); } super.onUpdate(context, manager, appWidgetIds); 

Weird Sache ist, wenn das Update passiert, die onUpdate () -Methode läuft – ich sehe die Ausgabe aus dem Log.d-Aufruf – aber es gibt keinen Aufruf von onDataSetChanged () in meiner RemoteViewsFactory. Auch wenn ich notifyAppWidgetViewDataChanged nenne, kein Effekt.

  • Update Android Support Library auf 23.2.0 Ursache Fehler: XmlPullParserException Binary XML-Datei Zeile # 17 <vector> Tag erfordert viewportWidth> 0
  • Messung der Downloadgeschwindigkeit mit Java / Android
  • SearchView in OptionsMenu nicht volle Breite
  • Android-Adb-Push-to-Location im Gerät ohne sdcard und kein Root-Zugriff
  • FragmentActivity kann nicht über ActivityInstrumentationTestCase2 getestet werden
  • AppCompat und Fragment funktionieren nicht
  • Fragmente noch hinzugefügt Backstack ohne Aufruf addToBackStack, warum?
  • Was macht mein Kartenfragment langsam?
  • Kann ich nur Super-Klasse injizieren, wenn du dagger2 für Abhängigkeitsinjektion einsetzst?
  • Android-Speicherleck auf Textansicht - LeakCanary (Leck kann ignoriert werden)
  • Android googleMap Map zeigt nicht, nur Raster, manchmal
  • @NonNull Annotation funktioniert nicht in Android Studio
  • 3 Solutions collect form web for “Android appwidget listview nicht aktualisiert”

    Dies liegt daran, dass Ihr RemoteViewsFactory die von ihm erstellte Fabrik für jede Widget-ID speichert. Wenn also das gleiche Widget eine Anfrage zum Erstellen einer neuen Fabrik (über Ihren Widget-Adapter-Service) sendet, wird die gleiche Fabrik zurückgegeben. Daher wird die Listenansicht nicht "aktualisiert".

    Wie ich dort herum gearbeitet habe:

    In deiner WidgetProviderClass

     adapter.setData(Uri.fromParts("content", String.valueOf(appWidgetIds[i]+randomNumber), null)); 

    Wo randomNumber eine zufällige Nummer ist (ein öffentliches statisches Mitglied deiner WidgetProvider-Klasse).

    Dann in deiner RemoteViewsFactory-Klasse:

     appWidgetId = Integer.valueOf(intent.getData().getSchemeSpecificPart()) - WidgetProvider.randomNumber; 

    Diese "Narren" der Service in das Denken, dass es eine Fabrik für ein anderes Widget zu schaffen, und damit schafft eine neue Fabrik mit den aktualisierten Werten, die an Ihr Widget angeschlossen ist.

    Hoffe das hilft.

    Sogar ich hatte das gleiche Problem. RemoteView von Widget hat dieses Problem.

    Lösung: Sende Sendung an sich selbst und aktualisiere Liste wieder. Dh Setzen Sie Daten auf Ihre komplette Ansicht und senden Sie dann Sendung an yopurself.

    Hoffe das hilft

    Testen Sie die dynamische Nummer

    In deiner WidgetProviderClass:

     int randomNumber=(int)(Math.random()*1000); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId+randomNumber); intent.setData(Uri.fromParts("content", String.valueOf(appWidgetId), null)); intent.putExtra("random",randomNumber ); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

    Und in deiner RemoteViewsFactory-Klasse:

     AppWidgetId = Integer.valueOf(intent.getData().getSchemeSpecificPart()); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.