Eu gastei cerca de 6 horas nisso até agora e atingi nada além de obstáculos. A premissa geral é que há alguma linha em ListView
(seja gerada pelo adaptador ou adicionada como uma visualização de cabeçalho) que contém um EditText
widget e a Button
. Tudo o que eu quero fazer é poder usar o jogball / setas, para navegar no seletor para itens individuais como o normal, mas quando chego a uma linha específica - mesmo que eu precise identificar explicitamente a linha - que tem foco criança, quero que essa criança se concentre em vez de indicar a posição com o seletor.
Eu tentei muitas possibilidades e até agora não tive sorte.
layout:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Visualização do cabeçalho:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Supondo que haja outros itens no adaptador, o uso das teclas de seta move a seleção para cima / baixo na lista, conforme o esperado; mas, ao chegar à linha do cabeçalho, ela também é exibida com o seletor e não há como focar noEditText
uso do jogball. Nota: tocando no EditText
vai centrar-se nesse ponto, no entanto, que se baseia em uma tela sensível ao toque, o que não deve ser um requisito.
ListView
aparentemente possui dois modos nesse sentido:
1 setItemsCanFocus(true)
.: o seletor nunca é exibido, mas oEditText
foco pode ser obtido ao usar as setas. O algoritmo de busca por foco é difícil de prever e nenhum feedback visual (em qualquer linha: ter filhos focáveis ou não) sobre o item selecionado, os quais podem proporcionar ao usuário uma experiência inesperada.
2 setItemsCanFocus(false)
.: o seletor é sempre desenhado no modo não sensível ao toque e EditText
nunca consegue obter foco - mesmo se você tocar nele.
Para piorar a situação, a chamada editTextView.requestFocus()
retorna verdadeira, mas na verdade não dá o foco EditText.
O que estou imaginando é basicamente um híbrido de 1 e 2, onde, em vez da configuração da lista, se todos os itens forem focáveis ou não, eu quero definir a focagem para um único item da lista, para que o seletor faça a transição sem problemas da seleção de linha inteira para itens não focáveis e percorrer a árvore de foco para itens que contêm filhos focáveis.
Algum comprador?