【问题标题】:OnClickListener for TextView does not get called没有调用 TextView 的 OnClickListener
【发布时间】:2015-01-11 12:07:18
【问题描述】:

我的 Android 应用程序中有几个文本链接,它们是电子邮件地址网络链接。我使用以下代码 sn-p 来设置它们(网络链接示例):

TextView textView = (TextView) findViewById(textViewId);
spannedText = Html.fromHtml("<a href=\"" + url + "\">" + titleText + "</a>");
textView.setText(spannedText, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Handle click
    }
});

TextView 具有 没有 特殊属性集,例如 android:linksClickableandroid:clickableandroid:focusable。它的风格继承自@android:style/TextAppearance.Small

由于某种原因,OnClickListener 永远不会被调用。

【问题讨论】:

  • 你需要使用那一件事。 LinkMovementMethodOnClick

标签: android textview onclicklistener spanned linkmovementmethod


【解决方案1】:

删除此代码

textView.setMovementMethod(LinkMovementMethod.getInstance());

并手动添加以下链接

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Handle click
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);

    }
});

【讨论】:

  • 谢谢。虽然很奇怪OnClickListener 没有覆盖LinkMovementMethod 的设置。我仍然不明白LinkMovementMethod 实际上有什么好处。请注意,如果是电子邮件链接,您必须在 url 字符串前面加上 "mailto:"
【解决方案2】:

无法从您粘贴的代码的 sn-p 中看出。请显示更多代码。例如,您对 textView 的声明是什么样的?

【讨论】:

    【解决方案3】:

    您的父视图上是否有一个 onClick 侦听器,它可能会覆盖文本视图?此外,您可能想尝试不使用匿名内部类作为您的侦听器,而是使用下面的 view.OnClickListener 来处理点击事件。

    myActivity extends Activity implements View.OnClickListener {
        @Override
        publiv void onClick(View v) {
            if(V.getId() == textViewId) {
                 // do work
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多