2012-11-02 1 views
9

So onUpdate Methode ruftAndroid Home-Bildschirm-Widget: RemoteViews setRemoteAdapter (...) Methode nicht auf API arbeitet 11+

remoteViews.setRemoteAdapter(id, R.id.listview, intent)

um einen Adapter zur Listenansicht im Widget anzuwenden.

Es gibt eine Schaltfläche in der Kopfzeile des Widgets, die ändern kann, welcher Datensatz in der Listenansicht angezeigt wird (denken Sie an Posteingang, Ausgang, Stern usw. für ein hypothetisches E-Mail-Widget). Wenn ich auf diese Schaltfläche klicke, gelangt der Benutzer zu einer Aktivität, mit der er auswählen kann, welcher Datensatz angezeigt werden soll. Wenn die Auswahl getroffen wird, wird der folgende Code ausgeführt:

Intent intent = new Intent(this, WidgetReceiver.class); 
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); 
intent.putExtra("notify", true); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {R.xml.widget_provider}); 
sendBroadcast(intent); 

Diese erfolgreich ruft die onUpdate Methode in der Klasse AppWidgetProvider des Widgets. Wenn ich jedoch zwischen verschiedenen Arten von Datensätzen umschalten würde, nachdem die Voreinstellung von 2-3 geändert wurde, funktioniert die Methode setRemoteAdapter einfach nicht mehr. Ich habe den Prozess ausgiebig protokolliert, und die Methode, die einen Dienst aufrufen soll, der wiederum die Klasse RemoteViewsService.RemoteViewsFactory lädt, um das Widget und seinen Adapter aufzufüllen, macht keines dieser Dinge. Das erste Mal, wenn Sie die Einstellung ändern, funktioniert es wie erwartet. Aber danach hört es auf.

Hat jemand eine Ahnung, was hier vor sich geht?

Antwort

10

Seltsam, aber eine Lösung gefunden. Android scheint die Absichten zwischenzuspeichern, die Sie in Ihrer OnUpdate-Methode verwenden. Wenn Sie das, was die gleiche Absicht zu sein scheint, erneut senden, wird es nicht so funktionieren, wie Sie es erwarten würden.

Lösung: haben Sie eine statische iterierende Ganzzahl, die Sie als Parameter in die Absicht Extras einschließen. Es hat das Problem für mich gelöst.

Intent intent = new Intent(context, WidgetService.class); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId); 
intent.putExtra("random", randomNumber); 
randomNumber++; 
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 

Oh, Android ...

+0

HI JMRboosties. Wären Sie so freundlich, Ihren Code zu teilen? Ich versuche auch, ein ListView in einem Homescreen-Widget zu setzen und eine Kopfzeile mit ein paar Schaltflächen hinzuzufügen (die ändern können, welcher Datensatz von der Listview angezeigt wird). Ich habe Schwierigkeiten, die Klicks auf die Kopfbuttons zu registrieren und die Listenansichten zu aktualisieren. Txs – Hubert

+1

Dies scheint für alle Updates passieren - schließlich Android wird langweilig und nimmt an, Sie haben die richtigen Ergebnisse:/Danke @JMRboosties :) – Graeme

+0

dies scheint nicht zu funktionieren, wenn Sie aktualisieren und Ihre App durch eine neuere Version, irgendwelche Vorschläge ersetzt wird um es zu lösen? – 2cupsOfTech

1

ich dieses Problem vor einiger Zeit konfrontiert. Dieser Ansatz mit Zufallszahlen hat mir auch geholfen.

Verwandte Themen