我在Blackberry应用程序中添加动态数量的按钮,并尝试在每次按钮单击时获取不同的事件。我无法为这些按钮数组应用setchangelistener(),因为在添加所有按钮后循环结束后,仅为最后一个索引按钮生成事件。
如果我使用getIndex(),它只在我没有在屏幕上添加任何其他字段时运行正常,但如果我添加其他字段以及这些按钮数组,则getIndex()函数会将它们计入索引也是如此。
有人可以帮我解决将FieldChangeListener设置为ButtonField数组的问题吗?
以下是我使用ButtonField数组的示例代码。我的代码我在屏幕顶部添加了两个测试LabelField,如果我删除它们代码将运行正常,我会得到不同的结果为每个按钮单击,但如果我让它们保持活动状态,索引将生效和按钮不会工作。
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;
}
}
}
谢谢, 尼科什
答案 0 :(得分:0)
从你的代码中删除if(field == btn [context])。它会起作用。 现在享受。
答案 1 :(得分:0)
btn[i].setChangeListener(listener);
使用以下听众,您将获得所选字段
FieldChangeListener listener = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
if ( field instanceof ButtonField ) {
// int matchedIndex = -1;
for ( int i = 0; i <= 10; i++ ) {
if ( field == btn[i] ) {
// matchedIndex = i;
Dialog.alert("Clicked"+i);
break;
}
}
}
}
};