Вопрос

Я ищу простое решение для диалогового окна «да/нет» для использования в мидлете Java ME.Я бы хотел использовать его вот так, но можно использовать и другие способы.

if (YesNoDialog.ask("Are you sure?") == true) {
  // yes was chosen
} else {
  // no was chosen
}
Это было полезно?

Решение

Вам нужен Тревога:

Оповещение — это экран, который показывает данные пользователю и ожидает определенного периода времени, прежде чем перейти к следующему отображаемому объекту.Предупреждение может содержать текстовую строку и изображение.Предполагаемое использование Alert — информировать пользователя об ошибках и других исключительных ситуациях.

С 2 команды («Да»/«Нет» в вашем случае):

Если в оповещении присутствуют две или более команды, оно автоматически преобразуется в модальное оповещение, а значение тайм-аута всегда равно НАВСЕГДА.Предупреждение остается на дисплее до тех пор, пока не будет вызвана команда.

Это встроенные классы, поддерживаемые в MIDP 1.0 и выше.Кроме того, ваш фрагмент кода никогда не будет работать.Такой API должен будет блокировать вызывающий поток, ожидающий выбора и ответа пользователя.Это идет в прямо противоположном направлении от модели взаимодействия пользовательского интерфейса MIDP, которая основана на обратных вызовах и делегировании.Вам необходимо предоставить свой собственный класс, реализуя Слушатель команд, и подготовьте свой код для асинхронного выполнения.

Вот (непроверенный!) пример класса, основанного на Alert:

public class MyPrompter implements CommandListener {

    private Alert yesNoAlert;

    private Command softKey1;
    private Command softKey2;

    private boolean status;

    public MyPrompter() {
        yesNoAlert = new Alert("Attention");
        yesNoAlert.setString("Are you sure?");
        softKey1 = new Command("No", Command.BACK, 1);
        softKey2 = new Command("Yes", Command.OK, 1);
        yesNoAlert.addCommand(softKey1);
        yesNoAlert.addCommand(softKey2);
        yesNoAlert.setCommandListener(this);
        status = false;
    }

    public Displayable getDisplayable() {
        return yesNoAlert;
    }

    public boolean getStatus() {
        return status;
    }

    public void commandAction(Command c, Displayable d) {
        status = c.getCommandType() == Command.OK;
        // maybe do other stuff here. remember this is asynchronous
    }

};

Чтобы использовать его (опять же, непроверено и в голове):

MyPrompter prompt = new MyPrompter();
Display.getDisplay(YOUR_MIDLET_INSTANCE).setCurrent(prompt.getDisplayable());

Этот код превратит приглашение в текущую отображаемую форму в вашем приложении, но не заблокирую вашу тему как в примере, который вы опубликовали.Вам нужно продолжить работу и дождаться вызова CommandAction.

Другие советы

Я не программировал на Java ME, но нашел в справочнике по дополнительным пакетамAPI расширенной графики и пользовательского интерфейса, и он используется как API Java SE для создания этих диалогов с помощью Класс JOptionPane

int JOptionPane.showConfirmDialog(java.awt.Component родительскийкомпонент, java.lang.Object > сообщение, java.lang.String title, int optionType)

Возврат может быть joptionpane.yes_option, joptionpane.no_option, joptionpane.cancel_option ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top