Симулятор Blackberry Torch и проблема EditField
Blackberry Torch демонстрирует странное поведение. Я создал подкласс EditField только для визуальных стилей. В основном приложении я создаю 2 экземпляра этих пользовательских полей EditFields и устанавливаю бит стиля в EditField.FILTER_REAL_NUMERIC
чтобы ограничить ввод цифрами. Эти EditFields затем помещаются в пользовательский GridFieldManager вместе с некоторыми полями меток, которые не могут быть сфокусированы.
Если я коснусь (в симуляторе) непосредственно одного из этих полей редактирования, отобразится полная клавиатура 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.
2 ответа
Проблема была с GridFieldManager в Blackberry OS 5.0. Я нашел пользовательский здесь, подкласс прямо из net.rim.device.api.ui.Manager
, что решило проблему.