2012-11-02 12 views
9

metoda Więc onUpdate wzywaAndroid Widget ekranu głównego: RemoteViews setRemoteAdapter (...) metoda nie działa na API 11+

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

w celu zastosowania adaptera do pogrupowanych w widgecie.

znajduje się przycisk w nagłówku widget, który może zmienić zestaw danych, który jest wyświetlany przez ListView (myślę Skrzynka odbiorcza, nadawcza, zagrała, etc dla hipotetycznego widget e-mail). Po kliknięciu tego przycisku użytkownik przechodzi do działania, które pozwala mu wybrać zestaw danych do wyświetlenia. Po dokonaniu wyboru, następujący kod jest uruchamiany:

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); 

To skutecznie wywołuje metodę onUpdate w klasie AppWidgetProvider widgetu. Jednak gdybym miał przełączać różne typy zestawów danych, po 2-3 zmianach preferencji, metoda setRemoteAdapter po prostu przestaje działać. Mam obszernie zalogowany proces, a metoda, która ma wywoływać usługę, która z kolei ładuje do klasy RemoteViewsService.RemoteViewsFactory, aby zapełnić widget i jego adapter, nie robi żadnej z tych rzeczy. Pierwsze kilka razy zmienić preferencje, działa zgodnie z oczekiwaniami. Ale potem przestaje.

Czy ktoś ma pojęcia, co się tutaj dzieje?

Odpowiedz

10

Dziwne, ale znalazłem rozwiązanie. Android wydaje się buforować intencje, których używasz w swojej metodzie onUpdate. Jeśli wyślesz ponownie to, co wydaje się być w tym samym celu, nie będzie ono działać tak, jak się spodziewasz.

Rozwiązanie: należy użyć statycznej iteracyjnej liczby całkowitej, która zostanie uwzględniona jako parametr w dodatkach intencyjnych. Rozwiązał problem dla mnie.

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. Czy byłbyś na tyle uprzejmy, aby udostępnić swój kod? Próbuję również umieścić ListView w widgecie ekranu głównego ORAZ dodać nagłówek za pomocą kilku przycisków (które mogą zmienić zestaw danych wyświetlany przez listę). Mam kłopot z rejestrowaniem kliknięć przycisków nagłówka i aktualizowaniem odsłon. Txs – Hubert

+1

Wydaje się, że dzieje się tak w przypadku wszystkich aktualizacji - w końcu Android się nudzi i po prostu zakłada, że ​​masz poprawne wyniki:/Dzięki @JMRboosties :) – Graeme

+0

wydaje się to nie działać po aktualizacji, a twoja aplikacja jest zastąpiona przez nowszą wersję, wszelkie sugestie rozwiązać? – 2cupsOfTech

1

I w obliczu tego problemu jakiś czas temu. To podejście z przypadkową liczbą też mi pomogło.

Powiązane problemy