У меня есть TextView . Я добавил специальные ссылки, такие как "@ abc" , "# android" , сопоставив некоторый шаблон регулярного выражения. Ссылки отображаются правильно. Однако я не могу извлечь текст ссылки, по которой щелкнули.Я использую SpannableString , чтобы установить текст в текстовое представление. Затем я устанавливаю интервалы, используя свой собственный ClickableSpan . Работает нормально. Кроме того, я также могу поймать событие onclick. Но метод onClick () имеет параметр View. Если я вызываю getText () в представлении (конечно, после преобразования его типа в TextView), он возвращает весь текст. Я много искал, но всегда находил способы добавить ссылки и поймать событие , а вот про получение текста ссылки ни разу не сказано.
Это код, который я использую для добавления ссылок и получения onclick. Я получил код из одного из потоков SO.
Pattern pattern = Pattern.compile("@[\\w]+");
Matcher matcher = pattern.matcher(tv.getText());//tv is my TextView
while (matcher.find()) {
int x = matcher.start();
int y = matcher.end();
final android.text.SpannableString f = new android.text.SpannableString(
tv.getText());
f.setSpan(new InternalURLSpan(new View.OnClickListener() {
public void onClick(View v) {
showDialog(1);
}
}), x, y, android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(f);
tv.setLinkTextColor(Color.rgb(19, 111, 154));
tv.setLinksClickable(true);
Вот InternalURLSpan:
class InternalURLSpan extends android.text.style.ClickableSpan {
View.OnClickListener mListener;
public InternalURLSpan(View.OnClickListener listener) {
mListener = listener;
}
@Override
public void onClick(View widget) {
mListener.onClick(widget);
TextView tv = (TextView) widget;
System.out.println("tv.gettext() :: " + tv.getText());
Toast.makeText(MyActivity.this,tv.getText(),
Toast.LENGTH_SHORT).show();
}
}
Можно ли получить текст нажатой ссылки? Если нет, есть ли способ связать некоторые данные о конкретной ссылке и знать, на какую ссылку нажимают? Есть указатели.
Спасибо