让 TextView 的事件响应支持 Intent_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 让 TextView 的事件响应支持 Intent

让 TextView 的事件响应支持 Intent

 2010/11/26 8:07:19  eidolon  http://chentingjia.javaeye.com  我要评论(0)
  • 摘要:按上一篇的方式可以给TextView加上事件响应,然而仅限于web、email、phone、map等几种,如果希望在点击后跳转到自己的Activity要怎么实现呢?看代码吧!这是Activity代码:@OverridepublicvoidonCreate(Bundleicicle){super.onCreate(icicle);linkify=newLinkifyUtil(this);Intentintent=newIntent("com.example.android.note.ADD")
  • 标签:TextView事件

按上一篇的方式可以给 TextView 加上事件响应,然而仅限于 web、email、phone、map等几种,如果希望在点击后跳转到自己的 Activity 要怎么实现呢?看代码吧!

?

这是 Activity 代码:

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        linkify = new LinkifyUtil(this);
        Intent intent = new Intent("com.example.android.note.ADD");
        intent.setData(Uri.parse("content://com.example.android.note/item"));
        
        linkify.addIntentLink(intent, (TextView) findViewById(R.id.tv_new_item));
    }

?

这是?LinkifyUtil 类:

package com.example.android.note.util;

import android.app.Activity;
import android.content.Intent;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

/**
 *
 * @author eidolon
 */
public class LinkifyUtil {
    private final Activity currentActivity;

    public LinkifyUtil(Activity activity) {
        this.currentActivity = activity;
    }

    public void addIntentLink(final Intent intent, final TextView view, final int start, final int end) {
        CharSequence source = view.getText();
        if (source instanceof Spanned) {
            IntentSpan[] spans = ((Spanned) source).getSpans(start, end, IntentSpan.class);
            if (spans.length > 0) {
                return;
            }
        }
        
        SpannableString spannableString = new SpannableString(source);
        spannableString.setSpan(new IntentSpan(new OnClickListener() {

            public void onClick(View view) {
                currentActivity.startActivity(intent);
            }
        }), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        view.setText(spannableString);
        view.setMovementMethod(LinkMovementMethod.getInstance());
    }

    public void addIntentLink(final Intent intent, final TextView view) {
        addIntentLink(intent, view, 0, view.getText().toString().length());
    }
}

?

最后是?IntentSpan 类:

package com.example.android.note.util;

import android.text.style.ClickableSpan;
import android.view.View;
import android.view.View.OnClickListener;

/**
 *
 * @author eidolon
 */
public class IntentSpan extends ClickableSpan {

    private final OnClickListener listener;

    public IntentSpan(View.OnClickListener listener) {
        this.listener = listener;
    }

    @Override
    public void onClick(View view) {
        listener.onClick(view);
    }
}
?

?

  • 相关文章
发表评论
用户名: 匿名