【问题标题】:Blackberry Development, adding dynamic number of buttons and setting Fieldchangelistener() for themBlackberry Development,添加动态数量的按钮并为它们设置 Fieldchangelistener()
【发布时间】:2012-04-11 16:51:03
【问题描述】:

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

  } 

 }



}

谢谢, 耐克什

【问题讨论】:

    标签: blackberry arrays buttonfield


    【解决方案1】:

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

    【讨论】:

    • 感谢您抽出时间帮助我解决问题,很抱歉花了这么长时间回复您。我已经从我的代码中删除了“if”条件并且它现在可以工作,但我仍然没有得到想要的输出。当我按下“Button 0”时,我得到“Label 1”作为输出,它应该是“Label 0”,即输出应该与 Button 字段的索引匹配。有没有办法只获取 Buttonfield 的索引,而不是获取屏幕上所有字段的索引。像 ButtonField.getindex()。
    【解决方案2】:
    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;
                                }
                            }
                        }
                    }
                };
    

    【讨论】:

      猜你喜欢
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多