RemoteViewFactory onDataSetChanged () вызывается только один раз для notifyAppWidgetViewDataChanged () [duplicate]
На этот вопрос уже есть ответ:
onGetViewFactory вызывается только один раз для нескольких виджетов 2 ответаЯ создаю виджет для загрузки списка ингредиентов по рецепту. Моя цель - иметь возможность иметь несколько экземпляров виджета и загружать / обновлять их список ингредиентов (ListView) независимо друг от друга. Я настроил действия по настройке, чтобы пользователь мог выбрать рецепт. После настройки и заполнения remoteViews и создания RemoteAdapter для моего списка ингредиентов метод всегда будет вызывать:
appWidgetManager.updateAppWidget(mAppWidgetId, views);
appWidgetManager.notifyAppWidgetViewDataChanged(mAppWidgetId, R.id.widget_list_view_layout);
updateAppWidget прекрасно обновляет представления, не относящиеся к коллекции, однако у меня есть претензия с notifyAppWidgetViewDataChanged () для моего представления коллекции, списка ингредиентов.
Когда я впервые добавляю виджет на экран (recipeId 4), он загружается правильно и вызывает правильный сервис и фабрику представления для заполнения удаленного списка. Но если я добавлю второй, вот что происходит (или его отсутствие):
D/WidgetUtils: createAppWidgetResult() with appWidgetId: 78, recipeId: 4
D/WidgetUtils: RecipeId of the ingredients passed: 4
D/WidgetRemoteViewService: onGetViewFactory() call received with mRecipeId 4
D/WidgetRemoteViewsFactory: WidgetRemoteViewsFactory() constructed with recipeId: 4
D/WidgetRemoteViewsFactory: onDataSetChanged() called
D/WidgetUtils: createAppWidgetResult() with appWidgetId: 79, recipeId: 1
D/WidgetUtils: RecipeId of the ingredients passed: 1
D/WidgetUtils: createAppWidgetResult() with appWidgetId: 80, recipeId: 2
D/WidgetUtils: RecipeId of the ingredients passed: 2
Конец журнала
Я ожидал следующего, если идентификатор рецепта равен1
D/WidgetRemoteViewService: onGetViewFactory() call received with mRecipeId **1**
D/WidgetRemoteViewsFactory: WidgetRemoteViewsFactory() constructed with recipeId: **1**
D/WidgetRemoteViewsFactory: onDataSetChanged() called
Но, как вы можете видеть из приведенного выше журнала, после 1 ничего не происходит (в отличие от 4, что является ожидаемым поведением)
UI мудро, у любого впоследствии созданного списка виджета фактически есть компоненты для рецепта 4 (не 1), даже когда деятельность по настройке явно передает идентификатор как 1 ... 2 ... 6..etc.
Достаточно странно Только после того, как я удалю все свои виджеты с домашнего экрана, а затем добавлю ОДИН виджет, например, идентификатор рецепта 1, будет вызван его onDataSetChanged ()?!, И снова, любые последующие виджеты не будут вызываться.
Смотри скриншот Идентификатор рецепта пирога Nutella - 4, а идентификат рецепта пирожных - 1. Сначала добавляется виджет пирога Nutella, ингредиенты для пирога Nutella загружаются правильно. Домовые, добавляются вторыми, и, как вы можете видеть, ингредиенты перенесены с первого, и они являются неправильными.
Испытано на эмуляторе и реальных устройствах> API 21, тот же результат.