Фокус перейти к верхнему изображению в VerticalFieldManager

У меня два VerticalFieldManager которые находятся в HorizontalFieldManager сделать две колонки с изображениями внутри. Эти изображения могут фокусироваться ( Blackberry добавляет рамку к изображению при фокусировке) с рамкой, но есть одна проблема, когда я прокручиваю справа налево, а противоположный фокус переходит к верхнему изображению в VerticalFieldManager как этого избежать и перейти к ближайшему левому / правому изображению? Часть, отвечающая за добавление изображений:

for(int i=0;i<15;++i){
        if(i%2==0){
            v1.add(tab[i]);
        }else{
            v2.add(tab[i]);
        }
}

1 ответ

Решение

Причина в том, что ваши менеджеры могут фокусироваться только с двух направлений. Для HorizontalFieldManager его левый и правый, в то время как VerticalFieldManager сверху и снизу. Когда вы прокручиваете свой горизонтальный менеджер влево, вы двигаетесь в направлении -1. Затем он передается вашему вертикальному менеджеру, где -1 означает, что он получает фокус снизу. Аналогично, когда вы двигаетесь вправо, он находится в направлении +1 и фокусируется сверху.

Лучше всего для вас было бы прислушиваться к навигационному движению (на горизонтальном менеджере), а затем программно фокусировать правильное поле.

HorizontalFieldManager horManager = new HorizontalFieldManager(NO_HORIZONTAL_SCROLL | NO_VERTICAL_SCROLL | USE_ALL_WIDTH | USE_ALL_HEIGHT)
{
    protected boolean navigationMovement(int dx, int dy, int status, int time)
    {
        if(dx > 0 && leftManager.isFocus()) // Moved right from the left manager
        {
            int index = leftManager.getFieldWithFocusIndex();
            rightManager.getField(index).setFocus();
            return true;
        }
        else if(dx < 0 && rightManager.isFocus())// Moved left from the right manager
        {
            int index = rightManager.getFieldWithFocusIndex();
            leftManager.getField(index).setFocus();
            return true;
        }

        return super.navigationMovement(dx, dy, status, time);
    }
};

Это предполагает, что оба вертикальных менеджера содержат одинаковое количество полей и только два столбца. Но немного поработав, вы можете заставить этот метод обрабатывать динамическое число вертикальных менеджеров и полей.

Другие вопросы по тегам