2013-07-01 3 views
0

보기에 링크가있는 ListView를 만들려고합니다. 지저귐 앱처럼. 지금은 그게 내가하고있는 일이야. 나는 TextView android : autoLink = "all"에서 설정했다. "Spannable 버퍼 = (Spannable) 텍스트;"Selection.setSelection을 스패닝 할 수 없습니다.

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    TextView widget = (TextView) this; 
    Object text = widget.getText(); 
    if (text instanceof Spanned) { 
     Spannable buffer = (Spannable) text; 

     int action = event.getAction(); 

     if (action == MotionEvent.ACTION_UP 
       || action == MotionEvent.ACTION_DOWN) { 
      int x = (int) event.getX(); 
      int y = (int) event.getY(); 

      x -= widget.getTotalPaddingLeft(); 
      y -= widget.getTotalPaddingTop(); 

      x += widget.getScrollX(); 
      y += widget.getScrollY(); 

      Layout layout = widget.getLayout(); 
      int line = layout.getLineForVertical(y); 
      int off = layout.getOffsetForHorizontal(line, x); 

      ClickableSpan[] link = buffer.getSpans(off, off, 
        ClickableSpan.class); 

      if (link.length != 0) { 
       if (action == MotionEvent.ACTION_UP) { 
        link[0].onClick(widget); 
       } else if (action == MotionEvent.ACTION_DOWN) { 
        Selection.setSelection(buffer, 
          buffer.getSpanStart(link[0]), 
          buffer.getSpanEnd(link[0])); 

       } 
       return true; 
      } 
     } 

    } 

    return false; 

} 현재 코드에 분쇄되어

:

private static class TweetViewHolder { 
    public LinkifiedTextView text; 
    public TextView time; 
    public ImageView authorImage; 
} 

holder.text.setText(post.getTweet().getText()); 
Pattern pattern = Pattern.compile("@+[a-zA-Z_]+"); 
Linkify.addLinks(holder.text, pattern, "http://www.twitter.com/", null, myTransformFilter); 
pattern = Pattern.compile("#+[a-zA-Z_]+"); 
Linkify.addLinks(holder.text, pattern, "http://www.twitter.com/", null, myTransformFilter); 

TransformFilter myTransformFilter = new TransformFilter() { 
@Override 
public String transformUrl(Matcher match, String url) { 
return url.substring(1); //remove the $ sign 
} 
}; 

이 내 "LinkifiedTextView"코드 왜 그런가요? 어떻게 작동 시키려면 어떻게 바꿀 수 있습니까? 감사합니다.

답변

1

모든 스팬이 스팬 넷이 아니므로 Spannable은 Spanned의 하위 클래스이지만 유일한 것은 아닙니다. 텍스트 객체는 다른 하위 클래스입니다.

+0

아이디어가 있습니까?이를 어떻게 수정할 수 있습니까? – roiberg

+0

라인을 스팬 버퍼 = (스팬) 텍스트로 만드십시오. 대신 –

+0

Selection.setSelection (buffer, buffer.getSpanStart (link [0]), 에서 파열됩니다. buffer.getSpanEnd (link [0])); – roiberg