如何使用Screen Object访问屏幕上的字段(UiApplication.getUiApplication()。getActiveScreen())

时间:2011-04-26 06:32:43

标签: blackberry uiapplication

我的查询是如何使用屏幕对象访问堆叠屏幕上的字段?

确切的问题如下:

当用户点击该字段时,我有一个屏幕有一个文本字段(ClientName),然后应用程序将推送一个新屏幕,它将允许用户使用MyWebSerivces在远程数据库中搜索。当用户从搜索结果中选择一个客户端时,我想在上一个屏幕上设置文本字段,其中包含用户在当前屏幕上选择的文本。

我已经尝试过pushScreen(新屏幕(“文本”),如果我只想做一次这个操作,那可能就是结果但是这不是我的选择,因为还有两个这样的字段会去其他屏幕从webservices获取数据。如果我每次按下新屏幕,那么在每次推屏操作后,我只会得到一个带有所需文本的字段

3 个答案:

答案 0 :(得分:1)

这不是黑莓(或任何特定的编程语言)相关问题。这是应用程序架构和常识的问题。如果一个屏幕应该更改另一个屏幕的Field,那么只需将Field的引用传递给将更改它的屏幕。

答案 1 :(得分:0)

嗨,我曾经遇到同样的问题,我确实喜欢这样:

屏蔽1

                  ------------------
  Client Name     |  text field     |
                  ------------------

当用户点击此文本字段或任何按钮时,您按下Screen2 在屏幕2中,当用户选择特定值时,请执行此操作。

1)在主类中使用一个静态变量,例如clientName。 2)设置此变量的值。 3)弹出活动屏幕

UiApplication.getUiApplication().getActiveScreen();

当调用此代码时,您将返回Screen1 现在在screen1中,一个方法被称为

    public void  onExposed()
    {
      //here u can set the text in textfield using the static variable 
      invalidate(); // for repainting
    }

答案 2 :(得分:0)

我找到了问题的答案。解决方案就在我的问题中,但起初我无法找到它。 解决方案非常简单 我写的时候想用

UiApplication.getUiApplication().getActiveScreen() 

这几乎是正确的方式,我正朝着正确的方向前进,但我失踪的是“我没有将屏幕(我刚刚从堆栈顶部检索到)投射到它的类型 我唯一应该做的就是“应该将屏幕转换为其类型。就像这样

UiApplication.getUiApplication().posScreen(this)
(MyScreen1) UiApplication.getUiApplication().getActiveScreen() 

现在我可以访问检索到的屏幕上的所有字段(MyScreen1)

要记住的事情

  1. 确保你将屏幕投射到它的类型,否则bb会给你资源找不到错误
  2. 在Stack上使用屏幕的好处

    1. 您可以使用已经创建的堆栈屏幕,无需创建新的
    2. 如果你将创建新的屏幕,它将堆叠在内存中,即使它没有用也会消耗越来越多的内存(如果没有用而不是将它留在堆栈上,那就习惯弹出屏幕))< / LI>
    3. 无需创建任何静态变量,因为您可以立即将所有字段设置为远离其他屏幕