下面的代码在循环中生成一个按钮,并尝试将字符串参数从按钮内部传递给按钮侦听器。我没有达到预期的结果。当我按下每个唯一的“ buttonField”对象时,新屏幕上的变量“ key”是相同的值。下面的代码正确吗?
谢谢
Enumeration keysEnumeration = table.keys();
while(keysEnumeration.hasMoreElements()){
key = (String)keysEnumeration.nextElement();
buttonField.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
UiApplication.getUiApplication().pushScreen(new Screen(key));
}
});
add(buttonField);
}
最佳答案
看起来key
是封闭类中的一个字段。
删除那个。进行密钥分配声明和final
:
final String key = (String)keysEnumeration.nextElement();
这将为您的侦听器的简单实例提供一个不同的
key
变量,以及相应的键。您可能还希望删除和可变的静态变量,使用Java 2集合(某些Swing仍绑定到1.1,这很不幸,因为它实际上不在1.1中)和泛型(如2004年引入!)。 (编辑:看到您有blackberry标签。它们还在吗?)