Android - fancy problema de fundo ListView
-
05-07-2019 - |
Pergunta
Eu tenho um ListView apoiado por ArrayAdapter personalizado onde cada item tem 2 LinearLayouts - uma cabeça que eu chamo, e o outro - corpo. O corpo está escondido (ida) até que o usuário clica na linha no momento em que ele desliza para fora. O segundo clique (na cabeça) vai esconder o corpo. No entanto se o usuário clica sobre o corpo que traz outra atividade. Tudo isso funciona muito bem, aí vem o problema:
Quando o usuário pressiona sobre o corpo Eu quero uma indicação visual da ação da mesma maneira como item da lista regular irá piscar um fundo laranja quando pressionado. Eu não estou recebendo isso por padrão uma vez que (minha teoria) o evento onPress é interceptado pela visão do corpo e não processados ??pelo item da lista.
A primeira coisa que eu tentei foi para executar body.setBackground('#ff00ff')
(não importa a cor) no evento onPress. Isso não funcionou uma vez (eu suspeito) não há nenhuma repintura após a chamada. Então eu cavar um pouco mais e decidiu fundo baseado em <selector/>
uso. I definido body_background.xml
na pasta drawable
e atribuiu isso a propriedade de fundo do corpo.
Não notei esse fundo só vai mudar se o mesmo é processado pela lista. Por exemplo, se eu set <item android:state_selected="true" android:drawable="@drawable/selected"/>
em seguida, quando eu aperto na cabeça - o fundo de ambos os elementos (cabeça e corpo) vai mudar, no entanto, quando eu pressionar no corpo - nada
Assim, para resumir a minha pergunta - como faço para mudar o fundo do elemento filho no item da lista se eu atribuir costume onClick manipulador para ele? Quaisquer sugestões serão muito apreciados
Solução
OK. Aqui está mais algumas informações que eu cavar ao longo do caminho.
- Atualmente estou tentando mudar de implementação para ExpandableListView que fornece a funcionalidade que eu tinha que codificado em (corpo deslizante). O problema que pode ter aqui é que eu tenho uma fantasia implementação da lista "sem fim" e eu estou usando ArrayAdapter método # add para adicionar dinamicamente itens à lista durante a rolagem (ver o meu tutorial sobre androidguys.com ) Bem, o método
add
está faltando naBaseExpandableListAdapter
então eu preciso ver se a adição de itens para matriz interna funcionará (ele não fez por ArrayAdapter), possivelmente fazendo ExpandableListView # NotifyChanged () vai cuidar disso - O fato de eu não vejo nada quando estou usando diretamente método
setBackgroundColor
é provavelmente devido à chamada subsequente ao chamadostartActivity
que pára toda a pintura até que nova atividade é exibida
P.S. Isso foi resolvido por mudar para ExpandableListView. E posso acrescentar - é lindo! Não há necessidade de inventar nada