Como programaticamente definir foco para HorizontalList para que pudesse receber eventos-chave (Flex)?

StackOverflow https://stackoverflow.com/questions/1625262

  •  06-07-2019
  •  | 
  •  

Pergunta

Por favor, olhar para o código:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:creationComplete>
    <![CDATA[
        list.setFocus();
    ]]>
</mx:creationComplete>
<mx:HorizontalList id="list">
    <mx:creationComplete>
        <![CDATA[
            setFocus();
        ]]>
    </mx:creationComplete>
    <mx:focusIn>
        <![CDATA[
            trace("Received focus");
        ]]>
    </mx:focusIn>
    <mx:keyDown>
        <![CDATA[
            trace("Key down");
        ]]>
    </mx:keyDown>
    <mx:dataProvider>
        <mx:Object label="Some"/>
        <mx:Object label="Different"/>
        <mx:Object label="Stuff"/>
    </mx:dataProvider>
</mx:HorizontalList>

Como você pode ver, eu tento fazer o meu HorizontalList focada quando o aplicativo é carregado. E eu realmente receber mensagem Received focus no console. Mas eu esperava que eu seria capaz de navegar sobre os elementos da lista com as setas depois de definir o foco. Mas isso não é o caso. Eles funcionam apenas após clicar componente com mouse. Então, o que estou fazendo de errado? Como fazer lista tem foco e responder aos setas?

Foi útil?

Solução

O seu aplicativo em execução dentro de um navegador? Você pode ter de foco definido no objeto SWF (via JavaScript), a fim de começar a interagir com ele sem clicar o objeto em primeiro lugar.

Por exemplo, supondo que você está usando Flex Builder, tente adicionar uma linha como essa ao final da tag SCRIPT do seu arquivo index.template.html:

window.onload = function()
{
    document.getElementById("${application}").focus();
};

Você pode precisar de fazer um pouco de ajustes, dependendo da sua situação específica, mas isso é provavelmente a questão. Definir o foco no objeto Flash explicitamente deve fazer o truque. Espero que ajude!

Outras dicas

Corri seu código e foi capaz de navegar pela lista com teclado sem clicando na lista em primeiro lugar - mas eu tinha que clicar em algum lugar no aplicativo Flex para que ele recebe o foco em primeiro lugar. Eu acho que é uma limitação do Flash em geral -. O SWF não receberá o foco do teclado a menos que você clique em algum lugar sobre ele (mouseOver ainda será demitido embora)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top