Pergunta

Estou usando uma exibição de galeria em que a exibição correspondente a cada item não é trivial e consiste em texto e vários botões.

Quando clico para arrastar a visualização da galeria (em algum lugar que não está em um dos botões), o estado desenhado do botão muda para pressionado e aparece como se todos os botões estivessem sendo pressionados no momento. Além disso, o mesmo comportamento acontece para o estado selecionado (por exemplo, todo o texto das visualizações de texto da criança muda de cor).

Estou tentando impedir esse comportamento e encontrei o atributo XML do Android: DuplicateParentState, bem como a propriedade SetDuplicateParentStateEnabled. Parece que deve realizar o que estou tentando fazer, mas parece não ter efeito.

Alguma ideia?

Foi útil?

Solução 2

Não tenho certeza de onde a propriedade DuplicateParentState entra em jogo, mas romper a fonte mostra que ela nunca é levada em consideração para os estados selecionados e pressionados. Eu criava uma classe de exibição personalizada e substituindo os métodos DispatchSetSelected e DispatchSetPressed.

Outras dicas

Talvez um pouco do lado tardio, mas depois de ter encontrado esse problema recentemente, tenho uma correção.

DispatchSetSelected e DispatchSetPressed não ajudam aqui, pois os métodos que você realmente precisa substituir são privados na galeria.

A solução é adicionar um layout extra (usei uma subclasse do linearlayout) em torno da visualização da criança, que substitui o conjunto (booleano) e simplesmente o ignora. Isso impede que a galeria force seu estado prensado nas crianças, enquanto ainda permite que essas crianças sejam ativadas diretamente, e não impedindo que os eventos sejam propagados para cima.

Se você se estender da Galeria para criar sua própria versão personalizada, você pode simplesmente fazer:

  @Override
  public boolean onDown(MotionEvent e) {
    // Ignore onDown events in order to avoid having every child's state set to 'pressed'
    return true;
  }

Isso ainda permitirá que as crianças da Galeria personalizada recebam adequadamente eventos de cliques e deslizar / arremessar trabalhos como pretendido.

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