通过单击从 textview 打开 url

Posted

技术标签:

【中文标题】通过单击从 textview 打开 url【英文标题】:Open url from textview with click 【发布时间】:2019-04-03 15:40:36 【问题描述】:

我正在使用 RecycleView 开发一个聊天应用程序,我设法使消息上的链接可点击,但不是我想要的方式。

这是我的听众:

recyclerView.addOnItemTouchListener(new Chat_LVAdapter.RecyclerClickListener(this, recyclerView, new ClickListener() 
        @Override
        public void onClick(View view, final int position) 
            Toast.makeText(Chat.this, "CLICK!", Toast.LENGTH_SHORT).show();
            TextView textView = view.findViewById(R.id.textView_chati_message);

            textView.setLinksClickable(true);
            Linkify.addLinks(textView, Linkify.WEB_URLS);
            textView.setMovementMethod(LinkMovementMethod.getInstance());

            /*Intent intent = new Intent(Chat.this, WebViewer.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("url_web", extractUrls(textView.getText().toString()));
            startActivity(intent);*/
        

        @Override
        public void onLongClick(View view, int position) 
            TextView textView = view.findViewById(R.id.textView_chati_message);
            String msg = textView.getText().toString();
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            if(clipboard != null)
                ClipData clip = ClipData.newPlainText("msg", msg);
                clipboard.setPrimaryClip(clip);
            
            Toast.makeText(Chat.this, R.string.texto_copiado, Toast.LENGTH_LONG).show();
        
    ));

这是 TextView xml:

<TextView
            android:id="@+id/textView_chati_message"
            android:layout_
            android:layout_
            android:autoLink="web"
            android:focusable="true"
            android:clickable="true"
            android:textColor="#000"
            android:textSize="16sp" />

问题来自onClick 方法。我可以看到Toast,所以该方法有效,但无法打开链接。它仅在我双击或长按时才有效。如果我使用注释代码,使用Intent 启动WebView,它也可以工作。但我希望能够将Linkify 用于电子邮件等。

我错过了什么吗?为什么Toast 有效,而Linkify 无效?

【问题讨论】:

【参考方案1】:

这是您的算法的问题,您在第一次单击时使文本链接,因此第二次单击将正常工作。移动这段代码:

TextView textView = view.findViewById(R.id.textView_chati_message);
textView.setLinksClickable(true);
Linkify.addLinks(textView, Linkify.WEB_URLS);
textView.setMovementMethod(LinkMovementMethod.getInstance());

致回收商ViewHolder

【讨论】:

我没有使用ViewHolder,我使用RecyclerView.Adapter 完成所有工作。这是好的做法还是我应该查看ViewHolder 在你的情况下你不能像那样使用Linkify 好吧,我正在使用ViewHolder。我使用两个,一个用于接收消息,另一个用于发送消息。我添加了代码,但没有任何改变。

以上是关于通过单击从 textview 打开 url的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮从手机中选择pdf文件并在textview上显示其文件名

如何在单击 TextView 中的文本链接时打开浏览器 [重复]

单击uiview时如何从textview中删除键盘?

通过移动设备在 Android Studio 中单击 TextView 会导致应用程序崩溃 [关闭]

单击TextView时我的应用程序崩溃了

单击TextView中的电话号码或电子邮件地址时出错