`
eidolon
  • 浏览: 39850 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

让 TextView 的事件响应支持 Intent

阅读更多

按上一篇的方式可以给 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);
    }
}
 

 

2
2
分享到:
评论

相关推荐

    Android实验报告—网络通信.doc

    cn.edu.bistu.dj1001. WebCommunication579 Activity名称:WebCommunication579 2、工程建立完毕后,首先进行界面设计,建立相应的子Layout界面 3、在工程中添加相应的.java文件,处理各个Activity的事件响应 4、在...

    Android开发应用实战详解源代码

    3.7 按钮事件响应 3.8 页面间的转换 3.9 activity调用 3.10 多个activity间的数据传递 3.11 将数据返回到前一个activity 3.12 对话框交互处理 3.13 文字颜色置换 3.14 文字字体设置 3.15 拖动相片特效 3.16 简易...

    Android实例代码

    3.4、响应系统设置的事件: 3.5、Handler消息传递机制: 第4章、深入理解Activity 4.1、建立、配置和使用Activity: 4.2、Activity的回调机制: 4.3、Activity的生命周期: 第5章、使用Intent和IntentFilter...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    3.4、响应系统设置的事件: 3.5、Handler消息传递机制: 第4章、深入理解Activity 4.1、建立、配置和使用Activity: 4.2、Activity的回调机制: 4.3、Activity的生命周期: 第5章、使用Intent和IntentFilter...

    Android开发资料合集--续

    9、响应Touch 15 10、Activity间的通信 15 1、Bundle传值 15 2、利用startActivityForResult与onActivityResult方法 16 11、使程序完全退出 18 12、列出所有音乐文件 18 13、使用Intent ACTION 调用系统程序 19 显示...

    疯狂Android讲义源码

     3.4 响应的系统设置的事件 162  3.4.1 Configuration类简介 162  3.4.2 重写onConfigurationChanged  响应系统设置更改 164  3.5 Handler消息传递机制 166  3.5.1 Handler类简介 166  3.5.2 Handler使用案例...

    疯狂Android讲义.part2

    3.4 响应的系统设置的事件 162 3.4.1 Configuration类简介 162 3.4.2 重写onConfigurationChanged 响应系统设置更改 164 3.5 Handler消息传递机制 166 3.5.1 Handler类简介 166 3.5.2 Handler使用案例 167 3.6 本章...

    疯狂Android讲义.part1

    3.4 响应的系统设置的事件 162 3.4.1 Configuration类简介 162 3.4.2 重写onConfigurationChanged 响应系统设置更改 164 3.5 Handler消息传递机制 166 3.5.1 Handler类简介 166 3.5.2 Handler使用案例 167 3.6 本章...

    btjax蓝牙控制软件源码

    //后面他的响应事件会用到 if(mBluetoothAdapter==null){ Toast.makeText(this, "请确认当前设备有蓝牙功能!", Toast.LENGTH_SHORT).show(); finish(); return; } //在子线程里开启蓝牙 new Thread(){ @...

    Android基础知识详解

    4种响应菜单项单击事件的方式 56 显示和编辑文本的控件 57 TextView 57 CheckedTextView 60 EditText 60 ExtraEditText 61 AutoComplteteTextView、MultiAutoCompleteTextView (自动完成输入内容) 61 Button 63 ...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    开发多媒体播放器

    //如果不是back键正常响应 } else { return super.onKeyDown(keyCode, event); } } /** * 处理文件或者目录的方法 */ private void fileOrDir(String path) { File file = new File(path); if ...

    Android典型技术模块开发详解

    2.5.2 事件处理 2.6 本章小结 第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 什么是任务 3.2 Activity的生命周期 3.3 基本用法 3.3.1 创建Activity 3.3.2 启动Activity 3.3.3 窗口Activity 3.3.4 Activity...

    MusicPlayer

    播放音乐文件采用MediaPlayer,音乐的播放应在后台进行,所以MediaPlayer应该在一个Service中,用户操作Activity上的控件,所以当用户操作时,应该通过Intent传递一些参数给Service,后者根据这些参数来控制...

    Android 开发技巧

    9.26、ANDROID键盘响应 236 9.27、后台监听某个按键 238 9.28、VECTOR用法 239 9.29、CURSOR 242 9.30、把一个字符串写进文件 244 9.31、把文件内容读出到一个字符串 245 9.32、扫描WIFI热点演示实例教程 246 9.33、...

    Android开发资料合集-World版!

    9.26、ANDROID键盘响应 236 9.27、后台监听某个按键 238 9.28、VECTOR用法 239 9.29、CURSOR 242 9.30、把一个字符串写进文件 244 9.31、把文件内容读出到一个字符串 245 9.32、扫描WIFI热点演示实例教程 246 9.33、...

    Google Android SDK开发范例大全(完整版)

    Android 应用程序可用于处理一个数据元素,或者对一个事件(例如接收文本消息)做出响应。 Android 应用程序是连同一个 AndroidManifest.xml 文件一起部署到设备的。AndroidManifest.xml 包含必要的配置信息,以便将...

Global site tag (gtag.js) - Google Analytics