Question

J'utilise une vue Galerie où la vue correspondant à chaque élément est non trivial et se compose de texte, ainsi que plusieurs boutons.

Lorsque je clique pour faire glisser la vue galerie (quelque part pas sur l'un des boutons) des changements d'état étirables à emboutie et apparaît le bouton comme si tous les boutons sont actuellement pressés. De plus, le même comportement se produit pour l'état sélectionné (par exemple tout le texte des TextViews de l'enfant change de couleur).

Je tente d'empêcher ce comportement et ont trouvé l'androïde: duplicateParentState attribut xml, ainsi que la propriété setDuplicateParentStateEnabled. Cela semble que ce devrait accomplir ce que je suis en train de faire, mais il semble avoir aucun effet.

Toutes les idées?

Était-ce utile?

La solution 2

Je ne sais pas où la propriété duplicateParentState entre en jeu, mais briser les émissions de sources qu'il est jamais pris en compte pour les états sélectionnés et pressés. Je créer une classe de vue personnalisée et en remplaçant les méthodes dispatchSetSelected et dispatchSetPressed.

Autres conseils

Peut-être un peu sur le côté tardif, mais après avoir rencontré ce problème moi-même récemment, j'ai une solution.

dispatchSetSelected et dispatchSetPressed ne contribuent pas vraiment ici, comme les méthodes que vous avez réellement besoin de modifier sont privées à l'intérieur Gallery.

La solution est d'ajouter une disposition supplémentaire (j'ai utilisé une sous-classe de LinearLayout) autour de la vue des enfants, les valeurs de remplacement setPressed (Boolean) et ignore simplement. Cela empêche la galerie de forcer son état sur les enfants emboutie, tout en permettant aux enfants d'être activés directement, et ne pas arrêter les événements de se propager vers le haut.

Si vous arrive d'étendre de la galerie pour créer votre propre version personnalisée, vous pouvez simplement faire:

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

Cela permettra encore les enfants de galerie personnalisée pour recevoir correctement cliquez sur les événements, et le balayage / fonctionne comme prévu jeter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top