У меня есть TextView. Я добавил пользовательские ссылки, такие как "@abc" , "# android" , сопоставляя некоторые шаблоны регулярных выражений. Ссылки отображаются правильно. Однако я не получаю способ извлечь текст ссылки, которая нажата. Я использую SpannableString для setText для текстового просмотра. Затем я устанавливаю промежутки, используя свой пользовательский ClickableSpan. Он работает нормально. Кроме того, я также могу поймать событие onclick. Но метод onClick() имеет параметр просмотра. Если я назову getText() в представлении (конечно, после приведения его в текстовый файл), он возвращает весь текст. Я много искал, но всегда находил способы добавить ссылки и поймать событие, но никто не сообщил о получении текста ссылки.
Это код, который я использую, чтобы добавлять ссылки и получать 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();
}
}
Можно ли получить текст ссылки? Если нет, есть ли способ связать некоторые данные с конкретной ссылкой и узнать, какая ссылка будет нажата? Любые указатели.
Спасибо