Android - AppWidget AppWidgetManager.updateAppWidget () не вызывается мгновенно - PullRequest
2 голосов
/ 27 июля 2011

Я разрабатываю приложение, которое использует RemoteView для отображения ListView. Для простоты приведу аналогию функциональности приложения:

  1. Пользователь выберет добавление приложения на домашний экран. После выбора виджета запускается операция настройки, и пользователь выбирает один рецепт из списка рецептов.
  2. После выбора рецепта из действия по настройке действие по настройке передает намерение 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 обновляться, когда он действительно вызывается? Что я делаю неправильно? Спасибо!

1 Ответ

0 голосов
/ 22 сентября 2011

Ну, я наконец-то решил проблему. Это что-то вроде хака, но я решил проблему, объявив трансляцию обновления и трансляцию обновления. Каждый раз, когда я хочу обновить виджет, я вызываю updateAppWidget (), а затем из функции, которая получает и обрабатывает эту трансляцию, я запускаю другую трансляцию, которая вызывает notifyChanged. Это работает все время!

...