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;
 }    

当我使用拨轮滚动时,滚动工作正常,但在带有轨迹球的设备上启动应用程序时会损坏。我发现问题出在框架方法 moveFocus 上,当我使用轨迹球滚动时根本不会调用它。

4

1 回答 1

1

问题已通过更改return true;return false;innavigationMovement方法解决。这是一个很好的错误 api 设计示例。当您看到像这样返回布尔值的一些 gui 事件处理方法时,您的第一个也是唯一的建议是返回值意味着事件已被消耗。但是在navigationMovement方法的情况下你错了。这是 JDE 4.2.1 javadoc 的摘录


参数: dx - 导航运动的幅度:左移为负,右移为正。dy - 导航运动的幅度:向上移动为负数,向下移动为正数。status - KeypadListener 定义的值的位域。time - 自设备开启以来的毫秒数。

返回False(扩展 Field 的类必须重写此方法以提供特定处理)。

好极了!

于 2009-10-08T11:00:55.903 回答