Mam appwidget, który używa ListView
. Stworzyłem klasę, która rozciąga RemoteViewsService
:onGetViewFactory wywoływane tylko raz dla wielu widżetów
public class AppWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new AppWidgetListFactory(this.getApplicationContext(), intent));
}
}
W moim AppWidgetProvider
wzywam następującą metodę dla każdej instancji widgetu (dla każdego appWidgetId
)
private static void fillInList(RemoteViews widget, Context context, int appWidgetId) {
Intent intent = new Intent(context, AppWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
widget.setRemoteAdapter(R.id.appwidget_listview, intent);
}
konstruktora AppWidgetListFactory
public AppWidgetListFactory(Context context, Intent intent) {
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
System.out.println("New TVAPWLF for: " + appWidgetId);
trains = WidgetData.getInstance().widgetMap.get(appWidgetId);
}
Teraz problem polega na tym, żeMetoda jest wywoływana tak często, jak są instancje widgetu, ale metoda onGetViewFactory
jest wywoływana tylko raz. W rezultacie wszystkie widżety wyświetlają te same dane.
Jak mogę to naprawić?
czy mógłbyś dodać więcej kodu? działa, jeśli uczynisz metodę 'fillInList' nie statyczną? – Ronnie
W moim przypadku intent.putExtra działa. Każda instancja otrzymuję prawidłowy identyfikator widgetu. –