2012-03-26 83 views
0

嗨,我是黑莓新手,正在尝试在黑莓7.0中的菜单单击事件中创建一个自定义输入对话框。一切工作正常,唯一的问题是,我无法检索出现在对话框中的文本框的字符串。在黑莓中创建一个自定义输入对话框

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(); 
    } 
} 

所以运行代码,点击菜单按钮后打开一个输入对话框。现在,如果我在文本框中输入任何内容,然后单击确定,我会得到String url的值==“”,然后我得到一个对话框说空。 我只想要那个文本框的值。请帮我卡在这...

回答

0

@AMUL如果你没有得到一个按钮点击事件比u还可以实现替代解决方案。执行PopupScreen,看起来像Dialog ..检查下面的代码,你可以轻松地获得有关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

感谢兄弟,这是一个很大的帮助..... – AMUL 2012-03-26 16:15:12

0

使用navigationClick在你的TestDialog class那样。 protected boolean navigationClick(int status, int time) { Dialog.alert(rd.getText()); return true; }它会工作...

+0

感谢您的早日答复...我实施了这种方法......但我应该在哪里调用它。我尝试在OK事件上调用它,但它会抛出异常...请给出更多详细信息... – AMUL 2012-03-26 14:13:55

+0

在您的TestDialog类中放置导航点击方法。出构造..它会工作..我havnt得到微小的按钮点击事件。 。此方法适用于所有按钮。 – Hitarth 2012-03-26 14:31:13

+0

我试过了,它的工作..没有任何错误 – Hitarth 2012-03-26 14:31:34