以下代码在循环中生成按钮,并尝试从按钮内将字符串参数传递给按钮侦听器。我没有达到预期的效果。当我按下每个唯一的'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);
}
答案 0 :(得分:1)
看起来key
是封闭类中的字段。
删除它。制作密钥分配声明和final
:
final String key = (String)keysEnumeration.nextElement();
这将为您的侦听器提供一个简单的实例key
变量,以及相应的键。
你可能还想删除你可能拥有的可变静态,使用Java 2集合(一些Swing仍然绑定到1.1,这是不幸的,因为它实际上不是1.1)和泛型(2004年引入! )。 (编辑:看到你有黑莓标签。它们还在吗?)
答案 1 :(得分:0)
Enumeration keysEnumeration = table.keys();
while (keysEnumeration.hasMoreElements()) {
final String key = (String) keysEnumeration.nextElement();
buttonField.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
UiApplication.getUiApplication()
.pushScreen(new Screen(key));
}
});
add(buttonField);
}
key
应该是最终的,可以在匿名内部类中访问。