2013-05-12 15 views
7

Ich erstelle eine kleine Android-App. Ich möchte einen Text in einer Textansicht mit mehreren Teilen zum Klicken anzeigen. (Jeder sollte eine andere Nachricht anzeigen)Android Mehrere anklickbare Zeichenfolgen in Textansicht

Endlich habe ich herausgefunden, wie man mehrere Spannen in einer Textansicht anzeigen kann, aber leider funktionieren die onClick Methoden nicht. Es passiert einfach nichts, nicht einmal eine Log-Zeile.

Ich habe so etwas wie dies:

SpannableStringBuilder ssb=new SpannableStringBuilder(); 
ssb.append("first second") 

ssb.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View v) { 
    //Eredmeny2.this is just the context, name of the whole class 
    Toast.makeText(Eredmeny2.this, "first", Toast.LENGTH_LONG).show(); 
    } 
}, 1, 3, 0); 

ssb.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View v) { 
    Toast.makeText(Eredmeny2.this, "second", Toast.LENGTH_LONG).show(); 
    } 
}, 7, 10, 0); 

TextView t1=new TextView(this); 
t1.setText(ssb); 
... 

Der Text ist in Ordnung unterstrichen, aber es passiert nichts, wenn ich auf sie klicken. Es ist ein Teil eines TableView, obwohl ich denke, dass dies nicht relevant ist. Hast du irgendwelche Ideen, warum es nichts macht? Was vermisse ich? Oder sollte ich es auf eine völlig andere Art und Weise tun?

Vielen Dank im Voraus.


der Layout-Datei dieser Teil verwenden würde, ist die folgende:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
    android:id="@+id/ScrollView01" 
    android:background="#FF0000"> 


    <TableLayout 
     android:id="@+id/TableLayout01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:stretchColumns="0" 
     android:showDividers="middle" 
     android:padding="3dp"> 
    <TableRow 
     android:id="@+id/TableRow01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/TextView01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="3dp" 
      android:background="#000000" 
      android:textColor="#FFFFFF" 
      android:padding="6dp" 
      android:text="Hour" 
      android:textSize="20sp" 
      android:textStyle="bold" > 

     </TextView> 
     <TextView android:id="@+id/TextView02" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="20sp" 
      android:textStyle="bold" 
      android:text="Minute" 
      android:padding="6dp" 
      android:textColor="#FFFFFF" 
      android:background="#000000"> 
     </TextView> 

    </TableRow> 

    </TableLayout> 


</ScrollView> 

Und das Textview-Layout, das die Textview direkt das Folgende verwendet:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tv" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:padding="10dp" 
android:textSize="16sp" 
android:background="#000000" 
android:textIsSelectable="false" 
android:textColor="#FFFFFF"> 
</TextView> 
+0

Können Sie Ihre Layout-Datei schreiben zu behandeln? – Noundla

+0

Sicher, hier gehst du, in der aktualisierten Frage. – skandigraun

+0

ändern Sie das zu wahr ... android: textIsSelectable = "true" – Noundla

Antwort

15

wie ich will verstehen Sie um mehrere Teile von textview anklickbar zu machen.

dieser Code funktionierte für mich!

SpannableString ss = new SpannableString("this is a text"); 
ss.setSpan(new myClickableSpan(1),0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new myClickableSpan(2),5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new myClickableSpan(3),8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

mTextView.setText(ss); 
mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

nur individuelle ClickableSpan machen das Click-Ereignis

public class myClickableSpan extends ClickableSpan{ 

    int pos; 
    public myClickableSpan(int position){ 
     this.pos=position; 
    } 

    @Override 
    public void onClick(View widget) { 
     Toast.makeText(getApplicationContext(), "Position " + pos + " clicked!", Toast.LENGTH_LONG).show(); 
    } 

} 
+0

Danke. Dieser ist gut von anderen Antworten. –

+0

einfache und elegante Antwort, sehr hilfreich !! schon aufgewertet. @ Akbar – TapanHP