我有一个带有实现滚动例程的自定义对象列表字段。
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中,当我用轨迹球滚动时,它根本没有被调用。
答案 0 :(得分:1)
已在return true;
方法中将return false;
更改为navigationMovement
,从而解决了问题。
这是一个有缺陷的api设计的好例子。当你看到一些这样的gui事件处理方法返回布尔值时,你的第一个也是唯一的建议是返回值意味着事件已被消耗。但是在navigationMovement
方法的情况下,你错了。这是JDE 4.2.1 javadoc
参数: dx - 导航动作的大小:向左移动和向左移动 积极向前迈进。 dy - 导航动作的大小:向上移动为负, 向下移动是积极的。 status - KeypadListener定义的值的位域。 time - 自设备开启以来的毫秒数。
<强>返回强>: False(扩展Field的类必须覆盖此方法才能提供 具体处理)。
Bravo RIM!