0

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

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

这导致用户认为搜索存在问题。然后,出乎意料地,网格刷新了。

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

4

1 回答 1

1

主要问题是刷新和加载事件是 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

于 2015-01-21T03:31:06.913 回答