2010-03-06 4 views
1

hey dans mon écran il y a un un champ d'édition et 2 champs de boutons personnalisés comme « OK » et « Annuler » ci-dessous ButtonField il y a des champs d'étiquette plus focalisabletempête Blackberry 9530 traçage des événements tactiles pendant le défilement

quand je écrivez un nom dans le champ d'édition et appuyez sur Entrée, la mise au point se fait sur le bouton "OK", mais comment régler le focus sur le bouton "ANNULER".

De plus, tout en faisant défiler la mise au point ne bouge pas automatiquement ??? Ce qu'il faut faire, je suis confus avec les événements tactiles et leur manipulation !!!

Veuillez aider !!!!!!!!!!!!

code:

 txt_Name = new EditField(TextField.NO_NEWLINE) 
      { 
       public void paint(net.rim.device.api.ui.Graphics g) 
       { 
        g.setColor(Color.MAROON); 
        super.paint(g); 
       } 
      }; 

      txt_Name.setFont(font); 

    v1 = new VerticalFieldManager(); 
    v1.add(txt_Name); 


    ButtonField btn1 = new ButtonField("OK",ButtonField.CONSUME_CLICK); 
    ButtonField btn2 = new ButtonField("CANCEL",ButtonField.CONSUME_CLICK); 

    v2 = new VerticalFieldManager(); 
    v2.add(btn1); 
    v2.add(btn2); 

    LabelField l1 = new LabelField("Hello Moon ",Field.Focussable); 
    LabelField l2 = new LabelField("Hello Citizen",Field.Focussable); 
    LabelField l3 = new LabelField("Hello People",Field.Focussable); 
    LabelField l4 = new LabelField("Hello world",Field.Focussable); 

    v3 = new VerticalFieldManager(); 
    v3.add(l1); 
    v3.add(l2); 
    v3.add(l3); 
    v3.add(l4); 

    add(v1); 
    add(v2); 
    add(v3); 
} 


protected boolean navigationClick(int status, int time) 
    { 
    if(OK.isFocus()) 
      { 
       //execute some code 
       return true; 
      } 
if(CANCEL.isFocus()) 
      { 
       //execute some code 
       return true; 
      } 
     } 
+0

Swati voir mise à jour ma réponse –

Répondre

1
txt_Name = new EditField(TextField.NO_NEWLINE) 
      { 
       public void paint(net.rim.device.api.ui.Graphics g) 
       { 
        g.setColor(Color.MAROON); 
        super.paint(g); 
       } 
      }; 

      txt_Name.setFont(font); 

    v1 = new VerticalFieldManager(); 
    v1.add(txt_Name); 


    ButtonField btn1 = new ButtonField("OK",ButtonField.CONSUME_CLICK); 
    ButtonField btn2 = new ButtonField("CANCEL",ButtonField.CONSUME_CLICK); 

    h2 = new HorizontalalFieldManager(); 
    h2.add(btn1); 
    h2.add(btn2); 

    LabelField l1 = new LabelField("Hello Moon ",Field.Focussable); 
    LabelField l2 = new LabelField("Hello Citizen",Field.Focussable); 
    LabelField l3 = new LabelField("Hello People",Field.Focussable); 
    LabelField l4 = new LabelField("Hello world",Field.Focussable); 

    v3 = new VerticalFieldManager(); 
    v3.add(l1); 
    v3.add(l2); 
    v3.add(l3); 
    v3.add(l4); 

    add(v1); 
    add(h2); 
    add(v3); 
} 


protected boolean navigationClick(int status, int time) 
    { 
int index = h2.getFieldwithFocusIndex(); 
    if(h2==0) 
      { 
       //execute some code for OK 
       return true; 
      } 
if(h2==1) 
      { 
       //execute some code for cancel 
       return true; 
      } 
     } 
0

Vous pouvez contrôler l'ordre de mise au point en redéfinissant la méthode « navigationMovement » sur l'écran ou le gestionnaire contenant les champs vario, tels que les boutons bien et annuler. Evaluez simplement les arguments passés à cette méthode, placez le focus sur le champ désiré en utilisant Field.setFocus(), et renvoyez true. En ce qui concerne la mise au point ne pas aller de l'avant avec le défilement - c'est juste la façon dont fonctionne l'interface utilisateur à écran tactile. Le focus ne bouge que lorsque vous touchez un champ pouvant être mis au point. Par conséquent, si vous ne touchez aucun champ pouvant être mis au point lorsque vous faites défiler l'écran, la mise au point ne changera pas.

+0

bien marc le problème que je fais face est comme :: quand j'entrer un nom dans le champ d'édition dire « bonjour », après ce que je touche l'ok bouton mais étant donné que l'accent est toujours sur le champ d'édition alors quand je touche le bouton ok alors son code correspondant n'exécute pas .. j'ai essayé de travailler avec TouchEvent, navigationClick, navigationmovement mais cldnt trouver une solution, mon bouton n'invoque pas, que faire ??? – Swati

+0

Essayer la fixation d'un FieldChangeListener sur chaque bouton au lieu d'utiliser navigationClick de l'écran. –

+0

Marc j'ai essayé ce que vous avez dit avec buttonField mais ne fonctionne toujours pas En fait nw j'ai utilisé un champ personnalisé à la place du bouton qui est une image concentrée champ havig mais il ne fonctionne pas non plus sur cela .. – Swati

1

je fait comme Mark a suggéré, FieldChangeListeners séparés pour chaque bouton:

class Scr extends MainScreen { 
    EditField txt_Name; 
    ButtonField btnOK; 
    ButtonField btnCancel; 
    VerticalFieldManager v1; 
    VerticalFieldManager v2; 
    VerticalFieldManager v3; 
    Font font = Font.getDefault().derive(Font.BOLD, 20); 

    public Scr() { 
     txt_Name = new EditField(TextField.NO_NEWLINE) { 
      public void paint(net.rim.device.api.ui.Graphics g) { 
       g.setColor(Color.MAROON); 
       super.paint(g); 
      } 
     }; 

     txt_Name.setFont(font); 

     v1 = new VerticalFieldManager(); 
     v1.add(txt_Name); 

     btnOK = new ButtonField("OK", ButtonField.CONSUME_CLICK); 
     btnOK.setChangeListener(
      new FieldChangeListener(){ 
       public void fieldChanged(Field field, int context) { 
      Dialog.inform("OK pressed"); 
     }}); 
     btnCancel = new ButtonField("Cancel", ButtonField.CONSUME_CLICK); 
     btnCancel.setChangeListener(
      new FieldChangeListener(){ 
       public void fieldChanged(Field field, int context) { 
      Dialog.inform("Cancel pressed"); 
     }}); 
     v2 = new VerticalFieldManager(); 
     v2.add(btnOK); 
     v2.add(btnCancel); 

     LabelField l1 = new LabelField("Hello Moon", Field.FOCUSABLE); 
     LabelField l2 = new LabelField("Hello Citizen", Field.FOCUSABLE); 
     LabelField l3 = new LabelField("Hello People", Field.FOCUSABLE); 
     LabelField l4 = new LabelField("Hello world", Field.FOCUSABLE); 

     v3 = new VerticalFieldManager(); 
     v3.add(l1); 
     v3.add(l2); 
     v3.add(l3); 
     v3.add(l4); 

     add(v1); 
     add(v2); 
     add(v3); 
    } 
} 

Maintenant, il semble être OK:
alt text http://img40.imageshack.us/img40/6472/textentered.jpgalt text http://img59.imageshack.us/img59/7574/okpressed.jpgalt text http://img641.imageshack.us/img641/9246/cancelpressed01.jpg

MISE À JOUR

Swati je peux cliquez sur ces boutons avec le simulateur de tempête en utilisant un clic de souris. Je ne peux pas trouver d'autre explication que le fichier de morue dans le simulateur est de l'ancienne version. Vous pouvez le vérifier rapidement en changeant tout texte d'étiquette dans le code, puis déployer et vérifier si cette modification sera appliquée dans l'application sur l'appareil. Dans le cas contraire, il s'agit de l'ancienne version et vous devez nettoyer le simulateur et déployer l'application une fois de plus.
Espérons que cela vous aidera!
Voir aussi BlackBerry - Changes are not getting reflected in my app

+0

max je travaille de la même manière, mais toujours la mise au point ne vient pas sur le bouton n ok annuler je l'appuie son si simple encore incapable de faire Gosh qu'est-ce que je fais mal ????????? ? merci bien u so much fr l'effort .... permettez-moi de trouver ce que im erreur stupide faire – Swati

+0

hey accent est sur les boutons quand j'appuyez sur les touches fléchées de clavier maintenant ce qu'il faut faire .. – Swati

+0

j'ai supprimé mon code nad a travaillé avec le vôtre il a travaillé !!!! Je pense que dans mon cas, le problème est avec le champ de bouton personnalisé sur lequel le focus n'apparaît pas ..... – Swati

Questions connexes