2015-08-13 2 views
0

Edited ...Вызов navigationClick из navigationClick 'отца' в Blackberry

я пытаюсь развернуть новый компонент в моем приложении BlackBerry. У меня есть новый класс, который расширяет HorizontalFieldManager, где я создал новый ListField. Внутри этого я перезаписал метод navigationClick и открыл всплывающее окно. Имя этого компонента - CustomComponentHorizontal. Я использую этот компонент в другом настраиваемом компоненте, его имя - CustomComponentVertical. Это код:

В Main.java:

...

CustomComponentVertical ccv=new CustomComponentVertical(); 

...

add(ccv); 

В CustomComponentVertical

...

CustomComponentHorizontal cch=new CustomComponentHorizontal{ 

...

protected boolean navigationClick(int status, int time) { 
     //Should I do something here?? 
     return super.navigationClick(status, time); 
     } 
    }; 

...

add(cch); 

В CustomComponentHorizontal:

public class CustomComponentHorizontal extends HorizontalFieldManager { 
     ListField choiceField=null; 
     PopupScreen popup=null; 
     public CustomComponentHorizontal(){ 
      choiceField = new ListField(){ 
      public boolean navigationClick(int status, int time) { 
      Field focus = UiApplication.getUiApplication().getActiveScreen().getLeafFieldWithFocus(); 
      if (focus instanceof ListField) { 
       popup = new ChoicePopupScreen(10, 50, choices); 
        popup.setChoice(choices);  
        UiApplication.getUiApplication().pushScreen(popup); 
        setPopup(popup); 
       return super.navigationClick(status, time); 
      } 
      };  
     } 
     } 
    } 

Моя цель в том, что, когда я нажимаю в моем компоненте, он начал navigationClick из ListField. Когда я добавляю фокус в свой компонент и щелкаю с помощью трекпада, всплывающее окно не открывается. Но, если я касаюсь экрана над компонентом, а затем я нажимаю трекпад, всплывающее окно открывается. Как я могу открыть всплывающее окно из компонента без использования события касания?

спасибо.

+0

Вам нужна «navigationClick» специально? Я не думаю, что вы справитесь с этим, так как bb не поддерживает рефлексию. В противном случае просто создайте свой собственный метод 'onClick' – Kevin

+0

Вопрос в том, почему, когда я нажимаю трекпад в своем компоненте, он не вызывается в navigationClick из спискаField? – user1983864

ответ

1

Я скопирую ваш код. Были некоторые ошибки, и ваш обратный вызов отсутствовал. Поэтому я немного исправил его и создал простой обратный вызов для тестирования, и срабатывает navigationClick. Надеюсь, это поможет, дайте мне знать, если есть другая проблема, которую я не понял.

public CustomComponent() 
    { 
     elements = new Vector(); 
     elements.addElement("Element 0"); 
     elements.addElement("Element 1"); 
     elements.addElement("Element 2"); 
     elements.addElement("Element 3"); 
     elements.addElement("Element 4"); 
     elements.addElement("Element 5"); 

     choiceField = new ListField(elements.size()) 
     { 
      public boolean navigationClick(int status, int time) 
      { 
       int index = getSelectedIndex(); 
       Dialog.inform((String) elements.elementAt(index)); 

       return true; 
      } 
     }; 

     choiceField.setCallback(new ListFieldCallback() 
     { 
      public int indexOfList(ListField listField, String prefix, int start) 
      { 
       return elements.indexOf(prefix, start); 
      } 

      public int getPreferredWidth(ListField listField) 
      { 
       return Display.getWidth(); 
      } 

      public Object get(ListField listField, int index) 
      { 
       return elements.elementAt(index); 
      } 

      public void drawListRow(ListField listField, Graphics graphics, int index, int y, int width) 
      { 
       String obj = (String) get(listField, index); 
       graphics.setColor(0x000000); 
       graphics.drawText(obj, 0, y, 0, width); 
      } 
     }); 

     add(choiceField); 
    } 
+0

Спасибо за ваш ответ, но у меня уже есть компонент, который отлично работает, если я использую его в примере проекта. Моя проблема заключается в том, чтобы использовать мой компонент в структуре старого кода. Я отредактировал мой вопрос. – user1983864

+0

Хорошо, сложно сказать, в чем проблема, но ваш клик где-то потребляется. Возможно, в поле 'CustomComponentVertical'. Распечатайте то, что возвращается его 'navigationClick', чтобы узнать, потребляется ли оно (true). Я не могу сказать, в чем проблема, не видя больше этих полей, но вы можете попробовать вызвать 'cch.setFocus()' непосредственно перед 'navigationClick' как работа – Kevin

Смежные вопросы