2010-06-23 11 views
1

J'ai écrit l'application qui utilise ListActivity. Chaque élément de la liste comprend ImageView et TextView. Un clic long sur l'entrée de la liste déclenche un effet de menu et de couleur car onCreateContextMenu a été remplacé. Parfois, TextView contient des liens HTML que je voudrais être interactif. J'ai lu #1697908 et fait des liens actifs, de sorte que le navigateur/lecteur youtube est démarré. Tout serait génial mais l'effet de couleur sur les longs clics a disparu (le menu contextuel apparaît toujours).Android: Liens HTML à l'intérieur de ListView - problème avec la mise en évidence

Quelqu'un pourrait-il me dire comment connecter ces deux fonctions et récupérer l'effet de couleur?

+0

duplication possible de [Les éléments ListView n'afficheront pas le focus lorsque vous les toucherez] (http://stackoverflow.com/questions/3078323/listview-items-wont-show-focus-when-touched) – Pentium10

+0

Je ne pense pas donc parce que le problème présenté par vous est causé par la propriété cliquable de ligne qui est définie sur true. Ici, tout fonctionnait jusqu'à ce que la gestion des liens HTML soit ajoutée. – boro

Répondre

0

J'ai réussi à résoudre ce problème. Peut-être pas directement de telle manière que je voulais mais c'est assez pour moi. Au lieu d'ajouter l'écouteur à TextView je l'ajoute à la rangée entière. La mise en évidence fonctionne comme prévu. Ce comportement est acceptable pour mon application, mais est une sorte de solution de contournement, donc je voudrais savoir si cela peut être fait mieux.

1

Vous pouvez utiliser Linkify dans un adaptateur de liste personnalisé. Linkify vous permet de définir des couleurs à l'aide d'un sélecteur comme ceci:

   Linkify.addLinks(
         holder.messageText, 
         messageDetailsMatcher, 
         "content://com.myApp/message/view?messageId=", 
         null, new myLinkTransformFilter(msgId)); 


       ColorStateList colors = null; 
       try { 
        XmlResourceParser xpp = getResources().getXml(
          R.color.link_color_selector); 
        colors = ColorStateList.createFromXml(getResources(), 
          xpp); 
       } catch (Exception e) { 
        Log.e("someError", e); 
       } 
       holder.messageText.setLinkTextColor(colors); 

(Note: le holder.messageText est un simple TextView dans un objet support)

alors vous avez un/res/couleur/color_selector. xml comme ceci:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:color="@drawable/message_focused" /> <item android:state_pressed="true" android:state_enabled="false" android:color="@drawable/message_pressed" /> <item android:state_enabled="false" android:color="@drawable/message_enabled" /> <item android:state_active="true" android:color="@drawable/message_active" /> <item android:color="@drawable/message_default" /> </selector>

+0

Merci pour la réponse. J'essaie d'ajouter Linkify dans un adaptateur de liste personnalisé tout le temps. Je ne suis pas tout à fait sûr si cela résout mon problème. Comment l'état de couleur appliqué à un seul TextView peut renvoyer un changement d'effet de couleur sur la ligne entière (LinearLayout qui contient TextView). – boro