从监听器内部将变量传递给构造函数

时间:2011-03-14 14:48:04

标签: java blackberry

以下代码在循环中生成按钮,并尝试从按钮内将字符串参数传递给按钮侦听器。我没有达到预期的效果。当我按下每个唯一的'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);    
    }

2 个答案:

答案 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应该是最终的,可以在匿名内部类中访问。