2015-11-02 4 views
0

У меня есть два VerticalFieldManager, которые находятся в HorizontalFieldManager, чтобы сделать два столбца с изображениями внутри. Эти изображения могут сфокусироваться (Blackberry add border to image when focus) с границей, но есть одна проблема, когда я прокручиваю справа налево и наоборот фокусируюсь на верхнем изображении в VerticalFieldManager, как избежать этого и перейти к ближайшему левому/правому изображению? Часть ответственная за добавление изображений:Focus skip to top image в VerticalFieldManager

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

ответ

2

Причина в том, что ваши менеджеры могут вводить фокус только в двух направлениях. Для 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); 
    } 
}; 

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