Blackberry Development,添加动态数量的按钮并为它们设置Fieldchangelistener()

时间:2010-04-22 08:02:04

标签: blackberry arrays buttonfield

我在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;

  } 

 }



}

谢谢, 尼科什

2 个答案:

答案 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;
                            }
                        }
                    }
                }
            };