Codename One - настройка текста невыбранного PickerComponent - PullRequest
0 голосов
/ 09 мая 2018

Я попробовал два компонента PickerComponent внутри TextModeLayout с помощью симулятора (со скином Android). Мне не нравится, что PickerComponent of Strings показывает три точки в невыбранном состоянии. Мне также не нравится, что PickerComponent of Date показывает сегодняшнюю дату. В обоих случаях я хочу показать пользовательский текст, а также потому, что я не хочу выбранного по умолчанию значения. Например, если я хочу выбрать дату рождения, я не думаю, что имеет смысл предварительно установить дату на сегодняшний день.

После многих испытаний я попытался решить эту проблему с помощью следующего кода, но я не уверен, что это правильный путь. У меня вопрос, какой подход лучше всего переносить (это нормально для Android и для iOS):

   /**
     * Set a custom text for an unselected PickerComponent placed in a
     * TextModeLayout
     *
     * @param picker
     * @param text
     */
    private void pickerComponentSetUnselectedText(PickerComponent picker, String text) {
        picker.getPicker().setText(text);
        picker.getPicker().setUIID("TextHint");
        picker.getPicker().addActionListener(l -> {
            l.getComponent().setUIID("TextField");
        });
    }

Я пытался использовать этот метод так:

  TextModeLayout textModeLayout = new TextModeLayout(4, 1);
    Container inputPersonData = new Container(textModeLayout);

    TextComponent name = new TextComponent().label("Nome");
    TextComponent surname = new TextComponent().label("Cognome");
    PickerComponent gender = PickerComponent.createStrings("Maschio", "Femmina", "altro").label("Genere");
    PickerComponent date = PickerComponent.createDate(new Date()).label("Data di nascita");

    inputPersonData.add(name);
    inputPersonData.add(surname);
    inputPersonData.add(gender);
    inputPersonData.add(date);

    pickerComponentSetUnselectedText(gender, "Genere");
    pickerComponentSetUnselectedText(date, "Data di nascita");

1 Ответ

0 голосов
/ 09 мая 2018

Компонент средства выбора состоит из двух частей, один с текстом не является родным, но всплывающее окно есть (и это является источником большинства проблем).

Если то, что вы сделали, работало с этим.Исторически мы рекомендовали бы использовать подклассы выбора и переопределения updateValue, но это невозможно сделать с PickerComponent, поэтому я добавил новый метод, который должен быть доступен в следующем обновлении:

PickerComponent cmp = new PickerComponent() {
    protected Picker createPickerInstance() {
        return new Picker() {
            protected void updateValue() {
              // place your logic here.. and invoke setText(...);
            }
        };
    }     
};
...