Как обрабатывать события щелчка по ссылке в 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());
Другие вопросы по тегам