在textview中使用链接跨度



我有一个在B类编程创建的textview。当类A调用它时

它添加了文字说"我去了商店",我需要单词"the"作为一个链接。这是我在CLASS B

中使用的。
sb.setSpan(new MyClickableSpan(Word), start, start+Word.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

调用类myclickableespan

public class MyClickableSpan extends ClickableSpan {
private String word;
public MyClickableSpan(String word) {
    this.word = word;
}
@Override
public void onClick(View widget) {
    Log.d("Spaannnned",word);
}
}

所以当这个链接被点击,它显示在我的日志。

但是我需要它在a类中运行一个函数并传入单词。

请帮

只需在span中添加一个click listener接口:

public class MyClickableSpan extends ClickableSpan {
public interface SpanClickListener
{
     public void onSpanClicked(View widget, MyClickableSpan span);
}
private String word;
private SpanClickListener clickListener;
public MyClickableSpan(String word, SpanClickListener listener) {
    this.word = word;
    clickListener = listener;
}
public String getWord() { return word; }
@Override
public void onClick(View widget) {
        Log.d("Spaannnned",word);
        if (clickListener != null) clickListener.onSpanClicked(widget, this);
    }
}


然后,在您的活动中:

MyClickableSpan span = new MyClickableSpan("Hello!", new MyClickableSpan.SpanClickListener() {
           @Override
           public void onSpanClicked(View widget, MyClickableSpan span)
           {
                Toast.makeText(context, span.getWord(), Toast.LENGTH_SHORT);
           }
        };
....
//add your span to the Spannable or whatever you want.

MyClickableSpan的构造函数提供" class A"的实例,将其保存在一个数据成员中,并从onClick()的方法中使用它。

或者,使用像Otto这样的事件总线,让onClick()发出"类a"订阅的消息。

相关内容

  • 没有找到相关文章

最新更新