Я разрабатываю приложение, которое использует RemoteView для отображения ListView. Для простоты приведу аналогию функциональности приложения:
- Пользователь выберет добавление приложения на домашний экран. После выбора виджета запускается операция настройки, и пользователь выбирает один рецепт из списка рецептов.
- После выбора рецепта из действия по настройке действие по настройке передает намерение AppWidgetManager.ACTION_APPWIDGET_UPDATE. Это намерение получено и обработано в методе onReceive моего класса AppWidgetProvider. Отсюда создается экземпляр RemoteView и передается в метод AppWidgetManager.updateAppWidget (). Это продолжает заполнять ListView ингредиентов.
Это все работает как положено, за исключением случаев, когда я пытаюсь вручную обновить ListView из appwidget. Я установил PendingIntent для повторного запуска операции настройки, которая также работает. К сожалению, вызов AppWidgetManager.updateAppWidget () вызывается не сразу, как при запуске при добавлении его на домашний экран, а ListView не обновляется. Обновление вызывается, однако, после прокрутки вниз списка способов (до тех пор, пока оно не пройдет количество строк, которое оно загрузило в свой кэш, я считаю). Это запускает мой FlightBoardAppWidgetService и ViewsFactory, как и должно быть. Это почти так, как будто updateAppWidget помещается в какую-то лениво загруженную очередь. Я попытался взглянуть на исходный код Android, чтобы увидеть, как кодируется AppWidgetManager.updateAppWidget (), но, похоже, он скрыт.
tl; dr: AppWidgetManager.updateAppWidget () не всегда вызывается мгновенно, что дает?
Есть ли способ заставить ListView обновляться, когда он действительно вызывается? Что я делаю неправильно? Спасибо!