1

我在黑莓应用程序中添加动态数量的按钮,并尝试在每次按钮单击时获取不同的事件。我无法为这些按钮数组应用 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;

  } 

 }



}

谢谢,耐克什

4

2 回答 2

0

从您的代码中删除 if (field == btn[context]) 。它将起作用。现在享受。

于 2010-04-23T11:56:21.740 回答
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;
                            }
                        }
                    }
                }
            };
于 2012-01-11T14:22:46.013 回答