不调用moveFocus

时间:2009-10-08 10:17:02

标签: blackberry scroll focus rim-4.2

我有一个带有实现滚动例程的自定义对象列表字段。

 public int moveFocus(int amount, int status, int time) {
  invalidate(getSelectedIndex());

  int unused = super.moveFocus(amount, status, time);
  return Math.abs(unused) + 1;
 }

 public boolean navigationMovement(int dx, int dy, int status, int time) {
  if (dy > 0) {
   if (selectedIndex < getSize() - 1) {
    setSelectedIndex(selectedIndex + 1);    
   }
  } else if (dy < 0) {
   if (selectedIndex > 0) {
    setSelectedIndex(selectedIndex - 1);
   }
  }

  return true;
 }    

当我使用拨轮滚动时,滚动工作正常,但在带有轨迹球的设备上启动应用程序时,滚动会中断。我发现问题存在于 framework 方法moveFocus中,当我用轨迹球滚动时,它根本没有被调用。

1 个答案:

答案 0 :(得分:1)

已在return true;方法中将return false;更改为navigationMovement,从而解决了问题。 这是一个有缺陷的api设计的好例子。当你看到一些这样的gui事件处理方法返回布尔值时,你的第一个也是唯一的建议是返回值意味着事件已被消耗。但是在navigationMovement方法的情况下,你错了。这是JDE 4.2.1 javadoc

的摘录
  

参数:       dx - 导航动作的大小:向左移动和向左移动   积极向前迈进。       dy - 导航动作的大小:向上移动为负,   向下移动是积极的。       status - KeypadListener定义的值的位域。       time - 自设备开启以来的毫秒数。

     

<强>返回:        False(扩展Field的类必须覆盖此方法才能提供   具体处理)。

Bravo RIM!