Blackberry:验证模态对话框输入,不允许保存/确定

时间:2011-05-25 16:17:18

标签: blackberry dialog validation

黑莓开发者大家好,

请告诉我如何验证用户输入的两个BasicEditField数据(myName应该长于2个字符; myFloat应该是> 10.0)并且:

  1. 将包含错误数据的BasicEditField标记为红色
  2. 阻止用户点击“保存”(或“确定”)按钮
  3. 如果Blackberry无法执行上述操作,还有其他事情吗?
  4. 以下是我非常简单的测试用例。它是一个完整的代码src \ mypackage \ MyApp.java,如果将其粘贴到JDE或Eclipse中,它将立即运行:

    screenshot

    package mypackage;
    
    import net.rim.device.api.system.*;
    import net.rim.device.api.ui.*;
    import net.rim.device.api.ui.component.*;
    import net.rim.device.api.ui.container.*;
    import net.rim.device.api.ui.decor.*;
    
    public class MyApp extends UiApplication {
        public static void main(String args[]) {
            MyApp myApp = new MyEdit();
            myApp.enterEventDispatcher();
        }
    
        public MyApp() {
            pushScreen(new MyScreen());
        }
    } 
    
    class MyScreen extends MainScreen {
    
        MenuItem myItem = new MenuItem("Show my dialog", 0, 0) {  
            public void run() {
                String[] buttons = { "Save", "Cancel" };
                Dialog dialog = new Dialog("My dialog", buttons, null, 0, Bitmap.getPredefinedBitmap(Bitmap.INFORMATION));
    
                EditField myNameField = new EditField("Name (must be > 2 chars): ", "", 
                    TextField.DEFAULT_MAXCHARS, EditField.NO_NEWLINE);
                dialog.add(myNameField);
    
                BasicEditField myFloatField = new BasicEditField("Number: (must be > 10.0)", "", 
                    5, EditField.FILTER_REAL_NUMERIC | EditField.EDITABLE);
                dialog.add(myFloatField);
    
                if (dialog.doModal() == 0) {
                    String myName = myNameField.getText();
                    float myFloat = 0.0f;
                    try {
                        myFloat = Float.parseFloat(myFloatField.getText());
                    } catch (NumberFormatException e) {
                    }
                    Status.show("Name: " + myName + ", Number: " + myFloat);
                }
            }
        };
    
        public MyScreen() {
            setTitle(new LabelField("How to validate input?"));
    
            addMenuItem(myItem);
        }
    }
    

    在提出这个问题之前,我已经查看了TextFilterField.isDataValid(),但我仍然不确定如何在Blackberry中验证用户输入(相比之下,我对如何验证用户有一个非常清晰的图片使用Web表单在Web脚本中输入 - 使用jQuery / PHP / Perl / whatever)

    谢谢! 亚历

1 个答案:

答案 0 :(得分:2)

您可以通过在编辑字段上设置FieldChangeListener来跟踪字段更改(使用setChangeListener()方法)。在每次更改(添加或删除的字母)时,都会通知侦听器,因此您可以获取最新的编辑字段文本并根据任何规则对其进行验证。

  

将包含错误数据的BasicEditField标记为红色

如果验证失败,您可以更改一些颜色变量(MyScreen的私有密码)并请求编辑字段失效(使用Field.invalidate()),以便框架使用您刚刚设置的颜色重新绘制它。

  

阻止用户点击“保存”(或“确定”)按钮

使用Dialog,您无法执行此操作。因此,您需要通过扩展net.rim.device.api.ui.container.PopupScreen来创建自定义弹出屏幕。在此屏幕类中,您将按钮作为屏幕成员,因此您将能够从编辑字段更改侦听器访问它们。如果验证失败,您可以使用Field.setEnabled(boolean value)禁用按钮。