Pierre87 Posté(e) 24 janvier 2011 Share Posté(e) 24 janvier 2011 Salut! J'ai un soucis avec une vue qui hérite de l'état "pressed" de sa vue parente. Or, ce n'est pas ce que je souhaite. Comment faire? Un peu plus d'explications: J'utilise un LinearLayout pour chaque lignes d'une ListView. Ce LinearLayout contient un autre LinearLayout donc l'aspect varie en fonction de son état "pressed" (un peu comme un bouton) (Je n'utilise pas la classe Button, car elle empêche de cliquer sur la ligne) Problème, quand je clique sur ma ligne, l'affichage de mon bouton réagit comme si je cliquais dessus (il s'enfonce) (bien évidemment, l'event d'appui sur le bouton n'est pas déclenché) Comment empêcher que cet état "pressed" passe de la vue parente à la fille? Merci! Lien vers le commentaire Partager sur d’autres sites More sharing options...
jokamax Posté(e) 24 janvier 2011 Share Posté(e) 24 janvier 2011 En gros la vue parente c'est le linearLayout englobant ? et le linearLayout interne se retrouve pressed autant que l'englobant ? (je suis pas sur d'avoir compris lol). Si c'est ca : Tu peux pas dans le onclick parent, de-pressed son enfant ? (désolé d'avance si totalement HS ^^) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 24 janvier 2011 Auteur Share Posté(e) 24 janvier 2011 c'est ça pour l'arborescence des vue. le bug est uniquement "visuel" :P ce n'est pas lié à l'évènement "click", mais à l'état "pressed" quand la vue parente est "pressed", alors la fille le devient aussi (chose que je veux empêcher) Je n'ai pas vraiment accès aux vues, c'est un layout en xml. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jokamax Posté(e) 24 janvier 2011 Share Posté(e) 24 janvier 2011 Et carrément mettre : android:clickable="false" dans le linearLayout fille ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 25 janvier 2011 Auteur Share Posté(e) 25 janvier 2011 Ben non justement! :( La vue fille est un "bouton". Mais j'utilise un LinearLayout pour 2 raisons: - mon bouton a une image - mettre un Button dans le layout d'une ligne d'une ListView empêche de cliquer la ligne Lien vers le commentaire Partager sur d’autres sites More sharing options...
jokamax Posté(e) 25 janvier 2011 Share Posté(e) 25 janvier 2011 Si le problème est juste visuel tu as une solution qui consiste à redéfinir les états "graphiques" d'un bouton personnalisé (je l'ai encore fais hier ^^) : ici Ou en français : ici En gros si tu définis que pour l'état 'pressed' ou 'focus' tu as la même image que par défaut ... même en cliquant aucun changement visuel ne sera effectué. Après peut être que je suis encore à coté de la plaque ^^ mais au moins ca aura le mérite de faire remonter le post ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 25 janvier 2011 Auteur Share Posté(e) 25 janvier 2011 Bon, je reprends de zéro :) Voilà le layout que j'utilise pour chaque ligne de ma ListView: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bkg_item_base"> ..................... des trucs <TextView android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawable="@drawable/button" /> </LinearLayout> Voilà le code de button.xml: <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_on" /> <item android:drawable="@drawable/button_off" /> </selector> Je suis obligé d'utiliser une TextView pour mon bouton, car si j'utilise un Button la ligne n'est plus cliquable avec mon OnItemClickListener. Problème: Quand je clique sur la ligne (mais pas sur le "bouton") mon bouton change d'apparence, comme si il était cliqué!!! Le bouton hérite donc de l'état "pressed" de la vue parente. Je veux empêcher ça :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jokamax Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 Bon c'est plus clair lol. Et comme ca ca marche mieux : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="false" android:background="@drawable/bkg_item_base"> ..................... des trucs <TextView android:id="@+id/button" android:clickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawable="@drawable/button" /> </LinearLayout> Si ca ne marche pas, question : Est ce que appuyer sur le layout lance l'action du bouton ou change juste la couleur de ce dernier ? Sinon peux tu essayer ces deux selectors et me revenir : Premier test : <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/button_off" /> <item android:state_pressed="true" android:drawable="@drawable/button_on" /> <item android:state_focused="true" android:drawable="@drawable/button_off" /> <item android:state_enabled="true" android:drawable="@drawable/button_off" /> </selector> Second Test : <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/button_off" /> <item android:state_window_focused="false" android:state_pressed="true" android:drawable="@drawable/button_off" /> <item android:state_window_focused="true" android:state_pressed="true" android:drawable="@drawable/button_on" /> <item android:state_focused="true" android:drawable="@drawable/button_off" /> <item android:state_enabled="true" android:drawable="@drawable/button_off" /> </selector> Jok Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 26 janvier 2011 Auteur Share Posté(e) 26 janvier 2011 Rien ne marche :( J'ai essayé de mettre les 2 "android:clickable", aucun effet. C'est l'apparence de mon "bouton" qui change, cliquer sur le layout ne déclenche pas le onClick() du "bouton" Les 2 selector n'ont aucun effet :( Merci de ton aide :P Lien vers le commentaire Partager sur d’autres sites More sharing options...
jokamax Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 Tu peux ajouter un onclik sur le layout externe avec comme action d'afficher tonboutton.isEnabled(), tonButton.isFocusabled, tonBoutton.isPressed, ... Et mettre le résultat affiché ici ? Je pense que ca peut aider. (J'avoue je pourrais faire un POC mais j'ai la flemme, comme tu as deja le code tu peux le faire à la vollé ^^) En gros en fonction de ce qui est true : - soit ajuster le selector - soit ajuster le xml - soit ... super tweak : onclik du layout (tonbontton.setPressed(false)) ou un truc du genre ^^ Jok Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 1 février 2011 Auteur Share Posté(e) 1 février 2011 Salut! Désolé d'avoir tardé à répondre, mais j'étais parti sur un autre problème entre temps ^^ En fait, le simple fait de poser un OnClickListener sur mon layout externe suffit à ce que mon "bouton" ne change plus d'état :P Par contre, l'évènement de clic sur la ligne de ma ListView n'est plus capté par mon OnItemClickListener (propre à mon activity), mais par mon OnClickListener (propre à ma ligne) C'est un peu crade, mais ça marche! Merci! Lien vers le commentaire Partager sur d’autres sites More sharing options...
jokamax Posté(e) 1 février 2011 Share Posté(e) 1 février 2011 Bravo ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.