我在黑莓应用程序中添加动态数量的按钮,并试图获得每个按钮单击不同的事件。我无法将setchangelistener()应用于这些按钮数组,因为一旦循环在添加完所有按钮后完成,事件将仅为最后一个索引按钮生成。黑莓开发,添加动态数量的按钮,并为他们设置Fieldchangelistener()
如果我让我们使用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;
}
}
}
感谢, 尼科什
感谢您抽出一些时间,并帮助我与我的问题和遗憾,采取这么长的时间在等你回来。 我已经从我的代码中删除了“if”条件,现在仍在工作,但仍然没有得到所需的输出。 当我按下“按钮0”时,我得到“标签1”,因为输出应该是“标签0”,即输出应与按钮字段的索引相匹配。 有没有什么办法来得到Buttonfield的索引,而不是获取屏幕上所有字段的索引。像ButtonField.getindex()一样。 – 2010-04-29 07:40:49