`

TextView 加上事件响应,点击后跳转到自己的 Activity

阅读更多

按这一篇(http://www.linuxidc.com/Linux/2011-10/45649.htm)的方式可以给 TextView 加上事件响应,然而仅限于 web、email、phone、map等几种,如果希望在点击后跳转到自己的 Activity 要怎么实现呢?看代码吧!

这是 Activity 代码:

  1. @Override  
  2. public void onCreate(Bundle icicle) {   
  3.     super.onCreate(icicle);   
  4.   
  5.     linkify = new LinkifyUtil(this);   
  6.     Intent intent = new Intent("com.example.Android.note.ADD");   
  7.     intent.setData(Uri.parse("content://com.example.android.note/item"));   
  8.        
  9.     linkify.addIntentLink(intent, (TextView) findViewById(R.id.tv_new_item));   
  10. }  

这是 LinkifyUtil 类:

  1. package com.example.android.note.util;   
  2.   
  3. import android.app.Activity;   
  4. import android.content.Intent;   
  5. import android.text.SpannableString;   
  6. import android.text.Spanned;   
  7. import android.text.method.LinkMovementMethod;   
  8. import android.view.View;   
  9. import android.view.View.OnClickListener;   
  10. import android.widget.TextView;   
  11.   
  12. /**  
  13.  *  
  14.  * @author eidolon  
  15.  */  
  16. public class LinkifyUtil {   
  17.     private final Activity currentActivity;   
  18.   
  19.     public LinkifyUtil(Activity activity) {   
  20.         this.currentActivity = activity;   
  21.     }   
  22.   
  23.     public void addIntentLink(final Intent intent, final TextView view, final int start, final int end) {   
  24.         CharSequence source = view.getText();   
  25.         if (source instanceof Spanned) {   
  26.             IntentSpan[] spans = ((Spanned) source).getSpans(start, end, IntentSpan.class);   
  27.             if (spans.length > 0) {   
  28.                 return;   
  29.             }   
  30.         }   
  31.            
  32.         SpannableString spannableString = new SpannableString(source);   
  33.         spannableString.setSpan(new IntentSpan(new OnClickListener() {   
  34.   
  35.             public void onClick(View view) {   
  36.                 currentActivity.startActivity(intent);   
  37.             }   
  38.         }), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
  39.            
  40.         view.setText(spannableString);   
  41.         view.setMovementMethod(LinkMovementMethod.getInstance());   
  42.     }   
  43.   
  44.     public void addIntentLink(final Intent intent, final TextView view) {   
  45.         addIntentLink(intent, view, 0, view.getText().toString().length());   
  46.     }   
  47. }  

最后是 IntentSpan 类:

  1. package com.example.android.note.util;   
  2.   
  3. import android.text.style.ClickableSpan;   
  4. import android.view.View;   
  5. import android.view.View.OnClickListener;   
  6.   
  7. /**  
  8.  *  
  9.  * @author eidolon  
  10.  */  
  11. public class IntentSpan extends ClickableSpan {   
  12.   
  13.     private final OnClickListener listener;   
  14.   
  15.     public IntentSpan(View.OnClickListener listener) {   
  16.         this.listener = listener;   
  17.     }   
  18.   
  19.     @Override  
  20.     public void onClick(View view) {   
  21.         listener.onClick(view);   
  22.     }   
  23. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics