Симулятор Blackberry Torch и проблема с EditField

Blackberry Torch ведет себя странно. Я создал подкласс EditField только для визуальных стилей. В основном приложении я создаю 2 из этих настраиваемых полей EditField и устанавливаю бит стиля равным EditField.FILTER_REAL_NUMERIC, чтобы ограничить ввод числами. Эти EditFields затем помещаются в настраиваемый GridFieldManager вместе с некоторыми полями меток, которые не могут быть сфокусированы.

Если я коснусь (в симуляторе) непосредственно одного из этих полей EditField, отобразится полная клавиатура qwerty. В этот момент, если я коснусь любого из полей редактирования, которые не имеют фокуса, отобразится правильная клавиатура. То же самое верно, если я использую трекпад для прокрутки фокусируемых полей; отображается правильная клавиатура.

Это известная проблема или что-то забыли?

ПРИМЕЧАНИЕ. Я понятия не имею, связана ли эта проблема с устройством Torch, поскольку в моем офисе еще нет устройства Torch.

ОБНОВЛЕНИЕ: похоже, что это связано с пользовательским GridFieldManager, который управляет этим полем. Этот пользовательский код предназначен только для определения того, куда должен быть направлен фокус:

public ExGridFieldManager(int rows, int columns, long style) {
        super(rows, columns, style );
    } // END contructor -----------------------------------------------------------------

    /* PROTECTED METHODS ----------------------------------------------------------------------- */

    // handle focus gain on container
    protected void onFocus( int direction )
    {
        if ( direction > 0 )    // focus came from previous field
        {
            for(int i = 0; i < this.getFieldCount(); i++)
            {
                if (this.getField(i).isFocusable())
                {
                    this.getField(i).setFocus();
                    return;
                }
            }
        }
        else if ( direction < 0 ) // catch case where focus came from following field
        {
            for(int i = this.getFieldCount() - 1; i >= 0 ; i--)
            {
                if (this.getField(i).isFocusable())
                {
                    this.getField(i).setFocus();
                    return;
                }
            }
        }
    } // END onFocus() ------------------------------------------------------------------

    protected void paint( Graphics g ) {
        super.paint(g);
    } // END paint() --------------------------------------------------------------------

    // catch touch on a given inside this manager and set focus appropriately
    protected boolean touchEvent( TouchEvent event ) {
        int index; // for holding index of field where touchEvent ocurred

        if ( event.getEvent() == TouchEvent.CLICK ) {
            index = this.getFieldAtLocation( event.getX(1), event.getY(1) );

            if ( index > -1 )
                this.getField(index).setFocus();
        }
        return false;
    } // END touchEvent() ---------------------------------------------------------------

    /* PUBLIC METHODS -------------------------------------------------------------------------- */

    // determines when this manager should and should not recieve focus
    public boolean isFocusable()
    {
        for(int i = 0; i< this.getFieldCount(); i++)
        {
            if (this.getField(i).isFocusable())
            {
                return true;
            }
        }
        return false;
    } // END isFocusable() --------------------------------------------------------------
} // END class ====================================================================================

ОБНОВЛЕНИЕ 2: я ориентируюсь на Blackberry OS версии 5.0.


person Mike D    schedule 22.06.2011    source источник


Ответы (2)


используйте FILTER_NUMERIC в качестве бита стиля.

person Ahmet Gulden    schedule 23.06.2011
comment
В отличие от FILTER_REAL_NUMERIC? - person Mike D; 23.06.2011
comment
я имею в виду, вместо FILTER_REAL_NUMERIC используйте FILTER_NUMERIC. - person Ahmet Gulden; 23.06.2011
comment
Установка бита стиля в FILTER_NUMERIC не работает. Та же проблема, что упоминалась выше, и десятичная точка отсутствует, поэтому нужен FILTER_REAL_NUMERIC. - person Mike D; 23.06.2011
comment
ну, мои поля редактирования с filter_numeric ведут себя так, как и должны. когда я касаюсь одного из них, на виртуальной клавиатуре отображается только числовой ввод. я думаю, что может быть другая проблема с вашим полем редактирования - person Ahmet Gulden; 23.06.2011
comment
Я так и думал, но не могу понять где. Трассировка стека именно такая, какой она должна быть. - person Mike D; 23.06.2011

Проблема была с GridFieldManager в Blackberry OS 5.0. Я нашел собственный здесь, подкласс прямо из net.rim.device.api.ui.Manager, который устранил проблему.

person Mike D    schedule 27.06.2011