Основная проблема заключается в том, что события Refresh и Load являются «серверными» событиями в архитектуре SD, поэтому у вас нет доступа к API или ресурсам устройства, таким как индикатор выполнения.
У нас было такое же требование в iOS, и мы использовали событие GXRefresh.
Event 'gxrefresh'
Composite
//Your code. Example: ProgressIndicator.Hide()
EndComposite
EndEvent
Gxrefresh — это локальное событие, которое выполняется после обновления и загрузки. Это скрытое событие, которое помогло нам в этом. (Это не официальное мероприятие и его можно вынести в любой версии GeneXus) Итак, решение такое:
- Запустите индикатор прогресса в событии ClientStart этой панели.
- Скройте индикатор выполнения в событии gxrefresh этой панели.
Примечание. Помните, что для использования события gxrefresh вам потребуется добавить скрытую кнопку с именем «gxrefresh». Вы можете скрыть эту кнопку, так как она вам не понадобится в пользовательском интерфейсе (мы установили Visible=false на панели приложений).
Если это решение по какой-либо причине невозможно (например, событие gxrefresh устарело или вы разрабатываете для Android), я могу придумать второй WA, который совсем не элегантен, но должен работать.
- Запустите индикатор прогресса в событии запуска клиента на панели.
- Поместите скрытую переменную с типом управления SD Chronometer.
- Установите таймер на 6 секунд
- Остановите индикатор выполнения на событии Tick хронометра SD и остановите хронометр, чтобы событие Tick больше не выполнялось.
Это два варианта, которые я могу придумать. Может быть, есть более простой способ, но я о нем не слышал. Для этого сценария отлично подойдет событие Grid.DidLoad. Наверняка у нас скоро будет это или какое-то другое решение этой проблемы.
Ссылки:
Хронометр SD: http://wiki.genexus.com/commwiki/servlet/hwikibypageid?25058< /а>
События SD: http://wiki.genexus.com/commwiki/servlet/hwikibypageid?17042< /а>
События на стороне сервера: http://wiki.genexus.com/commwiki/servlet/hwikibypageid?24234
person
Franklin
schedule
21.01.2015