2011-11-11 25 views
3

私は、テキストビュー用のクリック可能なタグを作成する機能を持っています。次のようになります。テキストビュー内の複数のクリックスパン

private CharSequence tagsBuilder(String text, String token) { 
    SpannableStringBuilder builtTags = new SpannableStringBuilder(); 
    int start = 0, end = 0; 

    for(int i = 0; i < 5; i++) { 
     start = 0; 
     end = text.indexOf(token, 0); 

     try { 
      if(start < end) { 
       SpannableStringBuilder ssb = new SpannableStringBuilder(text.substring(start, end)); 
       ssb.setSpan(new ClickableSpan() { 
        @Override 
        public void onClick(View v) 
        { 

         Log.i("DEBUGTAG", "Span clicked - " + ((TextView) v).getText()); 
        } 
       }, start, end, 0); 

       builtTags.append(ssb); 
       builtTags.append(" "); 
       text = text.substring(end + 1); 
      } 
     } catch (IndexOutOfBoundsException e) { 
      break; 
     } 
    } 

    return builtTags; 
} 

個別にクリック可能なタグが5つあります。しかし、問題は、クリックされたタグのために印刷されるログは、テキストビューの全文です。

ここで何か問題がありますか?クリックされた個々のタグのテキストを取得する方法TextViewの内容をログに記録します

Log.i("DEBUGTAG", "Span clicked - " + ((TextView) v).getText()); 

答えて

4

あなたのログ行は次のようです。だから... TextViewのテキストがあります。あなたがそこにtokenを取得したい場合は、中にいることをコピーする必要があります

ここにあなたが試すことができるものです:。

private CharSequence tagsBuilder(String text, final String token) { 
SpannableStringBuilder builtTags = new SpannableStringBuilder(); 
int start = 0, end = 0; 

for(int i = 0; i < 5; i++) { 
    start = 0; 
    end = text.indexOf(token, 0); 

    try { 
     if(start < end) { 
      SpannableStringBuilder ssb = new SpannableStringBuilder(text.substring(start, end)); 
      ssb.setSpan(new ClickableSpan() { 
       private String mText = token; 
       @Override 
       public void onClick(View v) 
       { 

        Log.i("DEBUGTAG", "Span clicked - " + mText); 
       } 
      }, start, end, 0); 

      builtTags.append(ssb); 
      builtTags.append(" "); 
      text = text.substring(end + 1); 
     } 
    } catch (IndexOutOfBoundsException e) { 
     break; 
    } 
} 

return builtTags; 
} 
+0

私の悪い、私は適切なパラメータを命名している必要があります。パラメータのトークンは実際にはセパレータです。現在、コンマ区切り文字列をトークンに分割するために、 "、"が渡されます。 – GreenBee

+0

ああ、そうですね、私はあなたのコードをすべてそっくりと読んでいませんでした。次に、私の 'token'の使い方をあなたが望む部分文字列に置き換えます。あなたのコードは見えますが、 'start'は常に0です。 – kabuko

+0

おかげで助けてくれました。私はあなたの元の提案を深く考えなかったが、今はそれを得る。それはわずかな変更 - 最終的なString mText = ssb.toString()で動作しました。 このコードは進行中の作業です。私はそれを最適化して不要なヴァルを除去しました。 – GreenBee

関連する問題