主要问题是刷新和加载事件是 SD 架构中的“服务器”事件,因此您无法访问设备的 API 或进度指示器等资源。
我们在 iOS 中也有同样的需求,我们所做的就是使用 GXRefresh 事件。
Event 'gxrefresh'
Composite
//Your code. Example: ProgressIndicator.Hide()
EndComposite
EndEvent
Gxrefresh 是在刷新和加载之后执行的本地事件。是一个帮助我们实现这一目标的隐藏事件。(这不是官方活动,可以在任何版本的GeneXus中取出)所以解决方法是:
- 在该面板的 ClientStart 事件上启动进度指示器。
- 隐藏该面板的“gxrefresh”事件上的进度指示器。
注意:请记住,为了使用 gxrefresh 事件,您需要添加一个名为“gxrefresh”的隐藏按钮。您可以隐藏该按钮,因为您在 UI 中不需要它(我们将其 Visible=false 放在应用程序栏上)。
如果由于任何原因无法实现该解决方案(例如,不推荐使用 gxrefresh 事件或您正在为 Android 开发),我可以想到第二个 WA,它一点也不优雅,但应该可以工作。
- 在面板的客户端启动事件中启动进度指示器
- 放置一个控制类型为 SD Chronometer 的隐藏变量。
- 将定时器设置为 6 秒
- 在 SD Chronometer 的 Tick 事件上停止进度指示器并停止 Chronometer,以便不再执行 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