0

我有一个以编程方式在 B 类中创建的文本视图。当 A 类调用它时。

它添加文字说“我去了商店”,我需要“the”这个词作为链接。这是我在 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 类中运行一个函数并传入单词。

请帮忙

4

2 回答 2

0

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

或者,使用Otto 之类的事件总线,让 onClick() 发送一条“A 类”订阅的消息。

于 2013-04-15T21:26:38.550 回答
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.
于 2013-04-15T22:06:41.763 回答