加载事件期间的进度指示器 - 是否可能?

时间:2015-01-20 15:20:18

标签: smart-device genexus genexus-sd

在Genexus中开发智能设备。我正在使用Load Event将数百条记录(由第三方webService返回)加载到Grid中(某些行可能具有不同的布局)。

当用户点击搜索按钮时,会立即显示ProgressIndicator(在程序执行期间)。当程序结束(检索到数据)时,ProgressIndicator会消失,但网格可能需要4-5秒才能显示新数据。

这会导致用户认为搜索存在问题。然后,意外地,网格刷新。

是否有可能在加载或刷新事件期间以某种方式显示ProgressIndication? 或者您有什么建议可以防止这种行为吗?

1 个答案:

答案 0 :(得分:1)

主要问题是刷新和加载事件是SD架构中的“服务器”事件,因此您无权访问设备的API或进度指示器等资源。

我们在iOS 中有相同的要求,我们所做的就是使用GXRefresh事件。

Event 'gxrefresh'
   Composite
      //Your code. Example: ProgressIndicator.Hide()
   EndComposite
EndEvent

Gxrefresh是在刷新和加载后执行的本地事件。 隐藏事件是否有助于我们实现这一目标。 (这不是官方活动,可以在任何版本的GeneXus中取出) 所以解决方案是:

  • 在该Panel的ClientStart事件上启动进度指示器。
  • 隐藏该面板'gxrefresh'事件的进度指示器。

注意:请记住,为了使用gxrefresh事件,您需要添加一个名为“gxrefresh”的隐藏按钮。您可以隐藏该按钮,因为您在UI中不需要它(我们在应用程序栏上将其设置为Visible = false)。

如果因任何原因无法解决该问题(例如gxrefresh事件已被弃用或您正在为Android开发)我可以想到第二个WA根本不优雅但应该可以工作。

  • 在面板的客户端开始事件中启动进度指示器
  • 使用控制类型SD Chronometer设置隐藏变量。
  • 将计时器设置为6秒
  • 在SD计时器的Tick事件上停止进度指示器并停止计时器,以便不再执行Tick事件。

这是我能想到的两个选项。 也许有一种更简单的方法,但我没有听说过。 Grid.DidLoad事件对于这种情况非常有用。对于这个问题,我们肯定会有这个或其他解决方案。

链接:

SD Chronometer: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