我在黑莓应用程序中添加动态数量的按钮,并尝试在每次按钮单击时获取不同的事件。我无法为这些按钮数组应用 setchangelistener(),因为在添加所有按钮后循环完成后,只会为最后一个索引按钮生成事件。
如果我让我们使用 getIndex(),它只有在我没有在屏幕上添加任何其他字段时才能正常运行,但是如果我在这些按钮数组中添加其他字段,getIndex() 函数也会在索引中计算它们.
谁能帮我将FieldChangeListener设置为ButtonField数组?
这是我使用 ButtonField 数组的示例代码。我在屏幕顶部添加了两个测试 LabelField 的代码,如果我删除它们,代码将运行良好,并且每次单击按钮都会得到不同的结果,但是如果我保持它们处于活动状态,则索引会生效并且 Button不会工作。
package buttonclickloop;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
public class ButtoncClickLoop extends MainScreen {
int i = 0;
private ButtonField[] btn = new ButtonField[50];
public ButtoncClickLoop() {
// TODO Auto-generated constructor stub
LabelField Field1 = new LabelField("Field1");
LabelField Field2 = new LabelField("Field2",DrawStyle.RIGHT | ButtonField.USE_ALL_WIDTH);
HorizontalFieldManager FieldHmgr = new HorizontalFieldManager();
FieldHmgr.add(Field1);
FieldHmgr.add(Field2);
FieldHmgr.setMargin(0,0,10,5);
add(FieldHmgr);
while (i < 3){
FieldChangeListener listener = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
context = field.getIndex();
if (field == btn[context]){
add(new LabelField("Label" + context + ""));
}
}
};
btn[i] = new ButtonField("Button" + i + "");
btn[i].setChangeListener(listener);
add(btn[i]);
i = i + 1;
}
}
}
谢谢,耐克什