2010-04-22 60 views
1

我在黑莓应用程序中添加动态数量的按钮,并试图获得每个按钮单击不同的事件。我无法将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; 

    } 

} 



} 

感谢, 尼科什

回答

0

删除,如果(场== BTN [背景])从你的代码。它将工作。 立即享受。

+0

感谢您抽出一些时间,并帮助我与我的问题和遗憾,采取这么长的时间在等你回来。 我已经从我的代码中删除了“if”条件,现在仍在工作,但仍然没有得到所需的输出。 当我按下“按钮0”时,我得到“标签1”,因为输出应该是“标签0”,即输出应与按钮字段的索引相匹配。 有没有什么办法来得到Buttonfield的索引,而不是获取屏幕上所有字段的索引。像ButtonField.getindex()一样。 – 2010-04-29 07:40:49

0
btn[i].setChangeListener(listener); 

使用下面的听众U将得到所选字段

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