在textview中使用链接跨度

时间:2013-04-15 21:23:48

标签: java android hyperlink textview spannable

我以编程方式在B级创建了一个textview。当A级打电话时。

它添加了文字说“我去了商店”,我需要单词“the”作为链接。我已经在CLASS B中使用了它。

sb.setSpan(new MyClickableSpan(Word), start, start+Word.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

正在调用MyClickableSpan类

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类中运行一个函数并传入单词。

请帮忙

2 个答案:

答案 0 :(得分:0)

将您的“A类”实例提供给MyClickableSpan的构造函数,将其保存在数据成员中,并使用onClick()方法中的那个。

或者,使用event bus like Otto让onClick()发出“A类”订阅的消息。

答案 1 :(得分:0)

只需在您的范围内添加点击监听器界面:

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.