Blackberry: проверить ввод модального диалога, не разрешать сохранять / ок - PullRequest
1 голос
/ 25 мая 2011

Здравствуйте коллеги разработчиков Blackberry,

, пожалуйста, посоветуйте мне, как проверить данные, введенные пользователем в два BasicEditField (myName должно быть длиннее 2 символов; myFloat должно быть> 10.0) и:

  1. Отметьте BasicEditField, содержащий неправильные данные, красным
  2. Запретить пользователю нажимать кнопку «Сохранить» (или «ОК»)
  3. Что-нибудь еще, если вышеуказанные действия невозможны с Blackberry?

Ниже приведен мой очень простой контрольный пример. Это полный код 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);
    }
}

Прежде чем задать этот вопрос, я посмотрел на TextFilter и Field.isDataValid () , но я все еще не уверен, как проверить пользовательский ввод в Blackberry (против у меня есть довольно четкое представление о том, как проверять пользовательский ввод в веб-скрипте с помощью веб-формы - с помощью jQuery / PHP / Perl / что угодно)

Спасибо! Alex

1 Ответ

2 голосов
/ 26 мая 2011

Вы можете отслеживать изменения полей, установив FieldChangeListener в полях редактирования (используйте метод setChangeListener ()). О каждом изменении (добавленном или удаленном письме) слушатель уведомляется, поэтому вы можете получить последний текст поля редактирования и проверить его в соответствии с любыми правилами.

Отметить BasicEditField, содержащий неправильные данные, красным

Если проверка не пройдена, вы можете изменить некоторую цветовую переменную (личный член для MyScreen) и запросить аннулирование поля редактирования (используйте Field.invalidate()), чтобы рамки перекрасили ее, используя только что заданный цвет.

Запретить пользователю нажимать кнопку «Сохранить» (или «ОК»)

С Dialog вы не можете этого сделать. Так что вместо этого вам нужно создать собственный всплывающий экран, расширив net.rim.device.api.ui.container.PopupScreen. В этом классе экрана у вас будут кнопки в качестве членов экрана, так что вы сможете получить к ним доступ из прослушивателя изменения поля редактирования. Если проверка не удалась, вы можете отключить кнопку с помощью Field.setEnabled(boolean value).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...