2011-05-07 6 views
1

J'ai un ListView avec un adaptateur de liste personnalisé (qui étend BaseAdapter). Ma liste des éléments de la vue sont gonflés de cette disposition:Android SpannableString sur l'élément ListView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal" 
    > 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_gravity="center_vertical" 
     > 
     <TextView 
      android:id="@+id/txtOne" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
     /> 

     <TextView 
      android:id="@+id/txtTwo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
     /> 
    </LinearLayout> 
</LinearLayout> 

A méthode getView les éléments de la vue sont créés et renseignés:

if (convertView == null) { 
    convertView = inflater.inflate(R.layout.teste, parent, false); 
} 
((TextView) convertView.findViewById(R.id.txtOne)).setText("Some text"); 
final SpannableString ss = new SpannableString("Another text"); 
ss.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(final View widget) { 
     startActivity(new Intent(widget.getContext(), AnotherActivity.class)); 
    } 
    }, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
((TextView) convertView.findViewById(R.id.txtTwo)).setText(ss); 

C'est montrant ma chaîne spannable sur le point de vue de l'article, mais je ne peux pas toucher dessus. Je peux seulement toucher la vue entière de l'article.

Je souhaite démarrer une autre activité lorsque l'utilisateur touche une chaîne de caractère, mais je souhaite également que l'ensemble de la vue de l'élément soit tactile.

Qu'est-ce qui me manque?

+0

Est-ce optimal si vous avez alloué une nouvelle SpannableString chaque fois que getView() est appelé comme ça? –

Répondre

3

Vous devez faire l'une des deux choses:

  1. android:linksClickable="true" sur la TextView dans la mise en page

  2. dans le code: txtViewTwo.setMovementMethod(LinkMovementMethod.getInstance());

Le résultat final serait le même.

+0

Question rapide pour le répondeur ou l'OP si vous avez encore environ 4 ans plus tard haha: Cette solution est-elle destinée aux chaînes pouvant être cryptées dans une vue de liste où les éléments ListView eux-mêmes sont également cliquables? Je suis confronté à ce problème, et lorsque j'utilise la deuxième suggestion de Joe, en définissant la méthode de mouvement, ma chaîne spannable dans ma disposition dans la vue liste devient cliquable mais l'élément de vue liste n'est pas cliquable. – ThePartyTurtle