Blackberry Storm Touchvents
-
21-08-2019 - |
Pergunta
Eu portei uma aplicação BlackBerry 4.6.0 para a tempestade em 4.7.0. Tudo está funcionando bem, além dos eventos de toque que estou tentando controlar. Eu prendi os eventos de toque no método abaixo, o que é o que é necessário, mas o problema é que minha lógica no TouchEvent executar e retornar o menu (que é ativada pelo botão de menu) é sempre exibida. Eu tentei devolver False, True e Super.Touchevent (Mensagem), mas ainda aparece.
Alguma idéia de como posso impedir que o menu apareça após prender o evento de toque?
protected boolean touchEvent(TouchEvent message)
{
if (message.getEvent() == TouchEvent.CLICK)
{
//My code here
}
}
Seus pensamentos são muito apreciados
Solução
Só para esclarecer a resposta de Haagmm:
Depois que um touchEvent.Click foi enviado para sua inscrição, um evento de navegação também será enviado. Isso é por razões de compatibilidade; portanto, coisas como Buttonfields funcionam em um dispositivo de tela sensível ao toque, mesmo que o aplicativo não tenha sido explicitamente escrito para responder aos TouchEvents.
Se um evento de navegação não for consumido (retorne true) por um campo no seu aplicativo, o menu de contexto será exibido.
Se você está vendo esse comportamento ao clicar em um campo de botão, a explicação é que, por padrão, o Buttonfields não consome eventos de cliques. Descobri que é uma boa prática sempre construir Buttonfields com o seguinte conjunto de bits de estilo:
ButtonField myButtonField =
new ButtonField( ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY );
O código do Haagmm é uma solução, mas uma idéia melhor é copiar seu código de manuseio TouchEvent.Click e também colá -lo no método NavigationClick. Dessa forma, um dispositivo de trackball como o BlackBerry Tour ainda poderá usar seu aplicativo.
Outras dicas
Se você está "clicando" na tela ou clicando na esquerda no mouse no SIM, acionará o menu de contexto, semelhante a se você clicaria no trackball em um dispositivo 4.6.
Você precisará fazer algo semelhante a isso no campo em que sobrecarregou o TouchEvent:
protected boolean navigationClick(int status, int time) { return true; }