【问题标题】:Linkify to call java codeLinkify调用java代码
【发布时间】:2010-07-12 15:43:17
【问题描述】:

有没有办法让Linkify'd 链接调用我的Activity 中的方法,或者我是否只允许使用Linkify 来创建指向其他活动/应用等的链接?

【问题讨论】:

    标签: android linkify


    【解决方案1】:

    您也可以放弃使用 linkify,而只使用 linkify 的正则表达式将可点击的跨度附加到您想要的位置。那些可点击的 span 可以调用你的代码。

    这是一个例子:Android: Launch activity from clickable text

    【讨论】:

    • 很有趣,这看起来很有希望,我今天晚些时候试试,然后回来......
    【解决方案2】:

    听起来您已经解决了几个问题。缺少的部分似乎有一个现有的 Activity 在前台接收 Intent。您可以通过在 Manifest (android:launchMode="singleTop") 中将 Activity 声明为 singleTop 来做到这一点。

    所以工作流程看起来像:

    1) 通过 addLinks 与您的正则表达式、Linkify.Matcher 和 Linkify.TransformFilter 链接文本

    2) 设置一个接收器来捕捉点击链接发起的 Intent。

    3) 在关联的BroadcastReceiver的onReceive中,设置一个Intent来封装你的链接被点击的事实。然后在 Activity(已经在前台)调用 startActivity,传递 Intent。

    4) 在Activity的onResume回调中,检查Intent是否应该调用该函数。

    【讨论】:

    • 是的,但 singleTop 不会导致该活动的一个实例一次只在堆栈中吗?我不想要那种行为。此活动是一个通用的“查看用户配置文件”活动,可以在导航堆栈中有多个实例...
    • 不,singleTop 允许多个实例,但如果目标任务在 Activity 堆栈顶部有一个 singleTop Activity 实例,它会使用该实例。 developer.android.com/guide/topics/manifest/…
    • 因此,假设 Linkify 的文本位于 Activity 本身上,据我所知,该 Activity 必须位于堆栈顶部才能单击链接,并且它应该可以工作.
    • 嗯,好的,我会试一试。我想如果这行得通,那将是赢家……现在,如果我可以结束我正在处理的这个 iphone 代码,那么我可以回到 android :)
    【解决方案3】:

    你可以设置一个接收器来监听一个特定的方案,当你点击链接时调用一些以该方案开头的 url。

    查看this答案了解更多详情。

    【讨论】:

    • 是的,但这不是开始一个新的活动吗?我希望链接化的代码在创建它的同一活动中调用一个方法,而无需实际启动一个新方法。例如,当他们单击链接时,我想显示一个带有一些菜单选项的弹出窗口。我不希望它创建一个新的活动,我希望它直接从现有的活动中运行......
    • 是的,它将开始新的活动,并且该活动将广播将在您的应用中处理的相同意图(并为自己调用完成)。
    • 感谢 Karan,但不幸的是,这对我不起作用,我需要它来调用该正在运行的活动中的方法,而无需启动任何新活动。
    【解决方案4】:

    不。 Linkify自带:

    • EMAIL_ADDRESSES
    • MAP_ADDRESSES
    • PHONE_NUMBERS
    • WEB_URLS

    您可以尝试扩展它。 Here是源代码。

    【讨论】:

    • 这并不完全正确,您可以创建指向自定义 url 的链接并匹配您使用 Linkify.addLinks(holder.messageText, myRegexPattern, "content://com.my.app /people/?url=",null, new MyLinkTransform(msg.getUrl()));
    • @Ben:你是对的。我想说的是,默认情况下它会带来这种情况。我会修改我的答案。
    • 我希望他们有一个类似于 webview (webview.setJavascriptInterface()) 的 api,当他们点击链接时,我基本上可以添加我自己的自定义 java 代码...
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2012-08-12
    相关资源
    最近更新 更多