2013-05-12 14 views
7

Tworzę małą aplikację na Androida. Chciałbym wyświetlić tekst w widoku tekstowym z wieloma częściami do kliknięcia. (Każdy powinien pokazać inny komunikat)Android Wiele klikalnych ciągów w widoku tekstowym

W końcu udało mi się dowiedzieć, jak wyświetlać wiele rozpiętości w jednym widoku tekstowym, niestety metody onClick nie działają. Po prostu nic się nie dzieje, nawet linia logcat.

mam coś takiego:

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); 
... 

Tekst jest podkreślony w porządku, ale nic się nie dzieje, kiedy i kliknij je. Jest częścią TableView, chociaż nie sądzę, że jest to istotne. Czy masz jakieś pomysły, dlaczego nic nie robi? Czego mi brakuje? Czy powinienem to zrobić na zupełnie inny sposób?

Z góry dziękuję.


plik układu ta część będzie wykorzystać to:

<?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> 

i układ TextView że TextView korzysta bezpośrednio jest następujący:

<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

Możesz opublikować plik układu? – Noundla

+0

Oczywiście, proszę, w zaktualizowanym pytaniu. – skandigraun

+0

zmienić to na true ... android: textIsSelectable = "true" – Noundla

Odpowiedz

15

jak rozumiem chcesz aby umożliwić kliknięcie wielu części widoku tekstowego.

ten kod pracował dla mnie!

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()); 

prostu zrobić zwyczaj ClickableSpan obsłużyć zdarzenia click

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

Dzięki. To dobre z innych odpowiedzi. –

+0

prosta i elegancka odpowiedź, bardzo pomocna !! już go upvot. @ Akbar – TapanHP