从VerticalFieldManager中删除一行

时间:2011-08-22 11:57:04

标签: blackberry

我正在尝试建立一个PIM监听器,它将更新一个MainScreen,其中列出了手机的所有联系人。

我正在做的是以下内容:

  • 我只加载了一个名为ContactsForm的表单,我将其存储到RuntimeStore

  • 我创建了一个PIMListListener来监听地址簿中发生的所有更改。

  • 添加联系人后,我将其成功添加到contactsForm

  • 删除联系人后,我将面临一个很大的问题:S !!!

我得到这个例子:“IllegalArgumentException”;此异常的文本是:UiEngine无需持有事件锁即可访问。我知道这些错误,我知道如何解决它们。所以我使用了以下代码:

UiApplication.getUiApplication().invokeLater( new Runnable() { public void run() {
  synchronized(UiApplication.getEventLock()) {
     uiContacts.vm.delete(uiContacts.vm.getField(j));
  }
}});

这应该可以解决问题。但我一次又一次地得到这个错误。如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

侦听器(如PIMListListener)不会在与UiApplication相同的Application上下文中收到回调。因此,在您的代码中,UiApplication.getUiApplication()并不像您期望的那样真正起作用。

最好的办法是在回调可以到达的地方存储对UiApplication的引用(可能在UiApplication初始化期间),然后用UiApplication.getUiApplication().invokeLater(...)替换myUiApp.invokeLater(...) ,其中myUiApp是您之前存储的UiApplication的引用。