2013-07-01 3 views
0

Я пытаюсь создать ListView со ссылками в его представлении. Так же, как приложение Twitter. прямо сейчас вот что я делаю: я устанавливаю в AndroidView android: autoLink = "all".Selection.setSelection не может быть натянутым

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" Код:

@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; 

}

Щас код дробильно на "Spannable буфера = (Spannable) текста;" Почему это и как я могу изменить ситуацию, чтобы заставить ее работать? Спасибо!

ответ

1

Потому что не все Spanneds являются Spannables. Spannable - это подкласс Spanned, но не единственный. Текстовым объектом является некоторый другой подкласс.

+0

У вас есть идея, как я могу ее исправить? – roiberg

+0

Сделать строку Spanned buffer = (Spanned) text; вместо –

+0

Но чем он будет раздавлен на Selection.setSelection (buffer, buffer.getSpanStart (ссылка [0]), buffer.getSpanEnd (ссылка [0])); – roiberg

 Смежные вопросы

  • Нет связанных вопросов^_^