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

Foi útil?

Solução

OK. Aqui está mais algumas informações que eu cavar ao longo do caminho.

  1. 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 na BaseExpandableListAdapter 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
  2. O fato de eu não vejo nada quando estou usando diretamente método setBackgroundColor é provavelmente devido à chamada subsequente ao chamado startActivity 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

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