2012-02-06 28 views
13

Trong một TextView, tôi muốn bật lên một bánh mì nướng bất cứ khi nào một siêu liên kết được nhấp vào, thay vì mở url tương ứng trong trình duyệt. Tôi sử dụng đoạn mã sau, nhưng vấn đề ở đây là phương pháp onClick() dường như không bao giờ được gọi là !!:OnClick() của ClickableSpan không hoạt động đối với URLSpan?

String source = "<a href=\"http://www.google.com\">link</a> "; 

// Get SpannableStringBuilder object from HTML code 
CharSequence sequence = Html.fromHtml(source, imgGetter, null); 
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); 

// Get an array of URLSpan from SpannableStringBuilder object 
URLSpan[] urlSpans = strBuilder.getSpans(0, strBuilder.length(), URLSpan.class); 

// Add onClick listener for each of URLSpan object 
for (final URLSpan span : urlSpans) { 
    int start = strBuilder.getSpanStart(span); 
    int end = strBuilder.getSpanEnd(span); 

    strBuilder.setSpan(new ClickableSpan() 
    { 
    @Override 
    public void onClick(View widget) { 
     Toast toast = Toast.makeText(context, "well done! you click " + span.getURL(), Toast.LENGTH_SHORT); 
     toast.show();   
    }  
    }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

TextView t4 = (TextView) findViewById(R.id.text4); 
t4.setText(strBuilder); 
// No action if this is not set 
t4.setMovementMethod(LinkMovementMethod.getInstance()); 

bất cứ ai có thể cho tôi biết những gì sai với mã của tôi và làm thế nào để sửa chữa nó? Cảm ơn.

Trả lời

18

Trên thực tế cấp cao của tôi đã tìm ra, chúng ta cần phải loại bỏ các URLSpan gốc trước khi thêm nhịp riêng của chúng tôi sử dụng setSpan()

// The original URLSpan needs to be removed to block the behavior of browser opening 
    strBuilder.removeSpan(span); 

Cảm ơn Damian.

+0

Tôi đã viết giải pháp cho đến khi tôi thấy câu trả lời của bạn. Tôi bắt đầu ngày hôm qua cuộc chiến chống lại vấn đề này. Mã của bạn cung cấp cho các đầu mối cuối cùng về vấn đề của tôi. – raultm

+0

Rất đẹp. Nó hoạt động với removeSpan. Giải pháp này là những gì tôi đang tìm kiếm. Cảm ơn –

Các vấn đề liên quan