我有一个在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"订阅的消息。