Blackberry Development, добавление динамического количества кнопок и настройка Fieldchangelistener () для них - PullRequest
1 голос
/ 22 апреля 2010

Я добавляю динамическое количество кнопок в приложение 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;

  } 

 }



}

Спасибо, Nikesh

Ответы [ 2 ]

0 голосов
/ 11 января 2012
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;
                            }
                        }
                    }
                }
            };
0 голосов
/ 23 апреля 2010

Удалите if (field == btn [context]) из вашего кода. Это будет работать. Наслаждайся сейчас.

...