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