2012-03-26 4 views
0

Bonjour, je suis nouveau sur BlackBerry et j'essaie de créer une boîte de dialogue de saisie personnalisée sur l'événement click menu dans blackberry 7.0. Tout fonctionne bien, le seul problème est que je ne suis pas capable de récupérer la chaîne de textbox présente dans la boîte de dialogue.Création d'une boîte de dialogue de saisie personnalisée dans blackberry

public class MyScreen extends MainScreen implements FieldChangeListener 
{ 
String host; 
private MenuItem mu; 
Dialog dg; 
TestDialog td; 

public MyScreen() 
{  
    final String choices[] = {"Ok","Cancel"}; 
    final int values[] = {Dialog.OK,Dialog.CANCEL}; 

    mu=new MenuItem("Configure IP", 1, 1){ 
     public void run() 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        td=new TestDialog(choices, values); 
        dg=new TestDialog(choices, values); 
        int iResponse = dg.doModal(); 
        if(iResponse == 0) 
        { 
         String url=td.getUsernameFromField(); 
         if(url.equals("")) 
         { 
          Dialog.alert("Empty"); 
         } 
       else 
       { 
        Dialog.alert("Not Empty"); 
       } 
        } 
        else 
        { 
         System.out.println("Cancel Presses"); 
        } 
       } 
      });   
     } 
    }; 

    addMenuItem(mu); 
    setTitle("Custom Dialog box"); 
    } 
} 



final class TestDialog extends Dialog{ 

public RichTextField rd; 

public TestDialog(String choices[],int values[]){ 
    super("Enter Host address", choices,values,Dialog.OK,  
Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), Dialog.GLOBAL_STATUS); 

    rd=new RichTextField(); 
    add(rd); 
    rd.setEditable(true); 
    XYEdges thickPadding = new XYEdges(10, 10, 10, 10); 
    Border roundedBorder = BorderFactory.createRoundedBorder(thickPadding, 
    Border.STYLE_SOLID); 
    rd.setBorder(roundedBorder); 
}  

    public String getUsernameFromField(){ 
    return rd.getText(); 
    } 
} 

L'exécution du code ouvre une boîte de dialogue de saisie après avoir cliqué sur le bouton de menu. Maintenant, si je saisis quelque chose dans la boîte de texte et que je clique sur ok, j'obtiens la valeur de String url == "", et j'obtiens une boîte de dialogue disant vide. Je veux juste cette valeur de textbox. S'il vous plaît aidez-moi je suis coincé sur ce ...

Répondre

0

@AMUL si vous n'obtenez pas d'événement de clic de bouton perticular que vous pouvez également mettre en œuvre une solution alternative pour cela. Mettre en œuvre PopupScreen et ses ressemble à Dialog .. vérifier le code ci-dessous, vous pouvez obtenir facilement cliquez sur l'événement de champ perticular button.

import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.FieldChangeListener; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.XYEdges; 
import net.rim.device.api.ui.component.ButtonField; 
import net.rim.device.api.ui.component.Dialog; 
import net.rim.device.api.ui.component.RichTextField; 
import net.rim.device.api.ui.container.PopupScreen; 
import net.rim.device.api.ui.container.VerticalFieldManager; 
import net.rim.device.api.ui.decor.Border; 
import net.rim.device.api.ui.decor.BorderFactory; 

public class CustomDialog extends PopupScreen implements FieldChangeListener 
{ 
    public RichTextField rd; 
    ButtonField btnOK,btnCancel; 

public CustomDialog() 
{ 
    super(new VerticalFieldManager()); 

    rd=new RichTextField(); 
    rd.setEditable(true); 
    XYEdges thickPadding = new XYEdges(10, 10, 10, 10); 
    Border roundedBorder = BorderFactory.createRoundedBorder(thickPadding,Border.STYLE_SOLID); 
    rd.setBorder(roundedBorder); 

    btnOK = new ButtonField("OK"); 
    btnOK.setChangeListener(this); 

    btnCancel = new ButtonField("Cancel"); 
    btnCancel.setChangeListener(this); 


    add(rd); 
    add(btnOK); 
    add(btnCancel); 
} 

public void fieldChanged(Field field, int context) 
{ 
    // TODO Auto-generated method stub 
    if (field == btnOK) 
    { 
     UiApplication.getUiApplication().invokeLater(new Runnable() { 

      public void run() { 
       // TODO Auto-generated method stub 
       Dialog.alert(rd.getText()); 
      } 
     }); 

    } 
    else if(field == btnCancel) 
    { 
     close(); 
    } 
} 

public void close() { 
    close(); 
    super.close(); 
} 

} 


Push this screen on your Menu button click event or where ever u want. hopw it helps !!! 
+0

merci mec qui a été d'une grande aide ..... – AMUL

0

Utilisez navigationClick dans votre TestDialog class comme ça. Cela fonctionnera ...

+0

Merci pour une réponse rapide ... J'ai implémenté cette méthode ... mais où devrais-je l'appeler. J'ai essayé de l'appeler sur OK événement de clic mais il jette une exception ... donnez svp plus de détails ... – AMUL

+0

placer la méthode de clic de navigation dans votre classe de TestDialog. hors du constructeur .. cela fonctionnera .. j'ai havnt obtenant l'événement de clic de bouton perticular. . cette méthode fonctionne pour tous les boutons. – Hitarth

+0

j'ai essayé et son fonctionnement .. sans aucune erreur – Hitarth

Questions connexes