Как обрабатывать события щелчка по ссылке в textView
Я использую Jsoup для разбора сайта, форматируя его Html.fromHtml()
и отображение форматированного текста в текстовом представлении.
Также я пользуюсь LinkMoveMentmethod.getInstance
сделать ссылки в текстовом представлении кликабельными.
Когда ссылки нажимаются, они запускают программу выбора браузеров.
Пожалуйста, как я могу переопределить это поведение по умолчанию.
Например, я хотел бы передать URL-адрес, на который нажали, моей собственной активности и использовать Jsoup для его анализа.
КОД
TextView pageContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page_details);
getWindow().getDecorView().setBackgroundColor(Color.WHITE);
pageContent = (TextView) findViewById(R.id.dpage_content);
}
....
private void parseHtml(String response) {
Log.d(TAG, "parsinghtml");
Document document = Jsoup.parse(response);
page_content = document.select("div.page-content").first().html();
Spanned spanned = Html.fromHtml(page_content, new UILImageGetter(pageContent, this), null );
}
2 ответа
Вам нужно создать свой собственный класс, который расширяет LinkMovementMethod.
public LinkClickHandler extends LinkMovementMethod{
private static LinkClickHandler sInstance;
public static LinkClickHandler getInstance() {
if (sInstance == null)
sInstance = new LinkClickHandler();
return sInstance;
}
@Override
public boolean onTouchEvent(TextView widget,
Spannable buffer, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
//Implement your code for handling the click.
}
return super.onTouchEvent(widget, buffer, event);
}
}
Чтобы использовать это, измените LinkMovementMethod.getInstance
в LinkClickHandler.getInstance
Вы можете использовать кликабельный промежуток
ClickableSpan cs = new ClickableSpan() {
@Override
public void onClick(View v) {
Log.d("main", "textview clicked");
Toast.makeText(Main.this, "textview clicked",Toast.LENGTH_SHORT).show();
} };
// set the "test " spannable.
span.setSpan(cs, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(span);
tv.setMovementMethod(LinkMovementMethod.getInstance());