1

Blackberryアプリケーションに動的な数のボタンを追加し、ボタンのクリックごとに異なるイベントを取得しようとしています。すべてのボタンを追加した後にループが終了すると、イベントは最後にインデックス付けされたボタンに対してのみ生成されるため、これらのボタンの配列にsetchangelistener()を適用することはできません。

getIndex()を使用すると、画面に他のフィールドを追加していない場合にのみ正常に実行されますが、これらのボタンの配列とともに他のフィールドを追加すると、getIndex()関数はそれらをインデックスにカウントします。

FieldChangeListenerをButtonFieldの配列に設定するのを手伝ってくれる人はいますか?

ButtonFieldの配列を使用する方法のサンプルコードを次に示します。画面の上部に2つのテスト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;

  } 

 }



}

ありがとう、ニケシュ

4

2 に答える 2

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 に答える
0

コードから if (field == btn[context]) を削除してください。今すぐお楽しみください。

于 2010-04-23T11:56:21.740 に答える