2010-04-22 5 views
1

J'ajoute un nombre dynamique de boutons dans une application Blackberry et en essayant d'obtenir différents événements sur chaque clic de bouton. Je ne suis pas en mesure d'appliquer le setchangelistener() pour ce tableau de boutons car une fois la boucle terminée après avoir ajouté tous les boutons, les événements sont générés uniquement pour le dernier bouton indexé. Si je fais de getIndex(), il fonctionne bien si je n'ajoute aucun autre champ sur mon écran, mais si j'ajoute d'autres champs avec ce tableau de boutons, la fonction getIndex() les compte dans l'indexation aussi bien.Blackberry Développement, ajouter un nombre dynamique de boutons et de définir Fieldchangelistener() pour eux

Quelqu'un peut-il m'aider s'il vous plaît dans la définition de FieldChangeListener au tableau de ButtonField?

Voici un exemple de code de la façon dont j'utilise le tableau de ButtonField. J'ai le code que j'ai ajouté deux test LabelField en haut de l'écran, si je les supprime le code fonctionnera bien et j'obtiendrai un résultat différent pour chaque clic de bouton, mais si je les garde actifs, l'indexation se fait et le bouton ne fonctionnera pas.


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; 

    } 

} 



} 

Merci, Nikesh

Répondre

0

Supprimer si (champ == BTN [contexte]) de votre code .it fonctionne. Profitez-en maintenant.

+0

Merci d'avoir pris un certain temps et me aider avec mon problème et désolé d'avoir pris ce temps pour se remettre à vous. J'ai supprimé la condition "if" de mon code et cela fonctionne maintenant mais je n'obtiens toujours pas la sortie désirée. Lorsque j'appuie sur le "bouton 0", j'obtiens "Label 1" comme sortie qui est censée être "Label 0" qui est la sortie qui doit correspondre à l'index du champ Button. Yat-il un moyen d'obtenir juste l'index de Buttonfield au lieu d'obtenir l'indice de tous les champs sur l'écran. Comme ButtonField.getindex(). –

0
btn[i].setChangeListener(listener); 

Utilisez l'auditeur ci-dessous u obtenir le champ sélectionné

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