当项目中包含链接时,ListView setOnItemClickListener不会触发

SSL*_*SSL 5 twitter android android-listview

我正在努力在一个应用程序中集成Twitter,虽然一切正常,但是如果有一个链接,我就setOnItemClickListener()不会被触发ListView item.当item没有链接(URL)时,它可以正常工作.

单击URL本身可在浏览器中打开网页.

请参阅帖子末尾添加的参考截图.

这是一个ListView使用a 的习惯BaseAdapter.我不确定要放入哪一段代码,但是当指向这里的人可能需要的代码块时,我会立即添加它.

需要忽略项目中的链接(URL)背后的想法是提供一种功能,当用户点击其中时,显示推文详细信息.类似于Twitter Android应用程序的功能.

那么如何setOnItemClickListener()忽略项目中的链接呢?

更新:

好的.所以我不确定它是否与这个问题相关,但是,从SO的一些解决方案的组合导致我进入TweetLanes开源项目,我已经成功地完成了一些工作.但不幸的是,它没有解决我的主要问题.

如何setOnItemClickListener()忽略项目中的链接,以便我可以单击它并在另一个活动中显示详细信息然后,当我点击链接时,不会触发setOnItemClickListener()?我每次尝试都会不断获得部分解决方案.但有时,当我点击a时link,setOnItemClickListener()触发器也是如此.

这就是当前流程的样子:

在此输入图像描述

在前两个屏幕截图中,它可以正常工作.毕竟不是点击链接.

然而,在底部的两个中,当我单击@ibnlive链接时,它会显示用户的配置文件(@ibnlive).这部分源自TweetLanes来源.问题是,还会触发点击侦听器.这是我正在尝试的解决方案之一.在这种情况下,我已经注释掉setOnItemClickListener(),并正在使用OnClickListener()TextView.这是到目前为止部分成功的一种方法.

She*_*tib 1

您可能想看看babay 在 ListView 上的回答: TextView with LinkMovementMethod made list item unclickable?

他提出了一个 TextView,基本上通过引入不同的方法来解决这个问题LinkMovementMethod

public static class LocalLinkMovementMethod extends LinkMovementMethod{
    static LocalLinkMovementMethod sInstance;


    public static LocalLinkMovementMethod getInstance() {
        if (sInstance == null)
            sInstance = new LocalLinkMovementMethod();

        return sInstance;
    }

    @Override
    public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
        int action = event.getAction();

        if (action == MotionEvent.ACTION_UP ||
                action == MotionEvent.ACTION_DOWN) {
            int x = (int) event.getX();
            int y = (int) event.getY();

            x -= widget.getTotalPaddingLeft();
            y -= widget.getTotalPaddingTop();

            x += widget.getScrollX();
            y += widget.getScrollY();

            Layout layout = widget.getLayout();
            int line = layout.getLineForVertical(y);
            int off = layout.getOffsetForHorizontal(line, x);

            ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

            if (link.length != 0) {
                if (action == MotionEvent.ACTION_UP) {
                    link[0].onClick(widget);
                } else if (action == MotionEvent.ACTION_DOWN) {
                    Selection.setSelection(buffer,
                            buffer.getSpanStart(link[0]),
                            buffer.getSpanEnd(link[0]));
                }

                if (widget instanceof TextViewFixTouchConsume){
                    ((TextViewFixTouchConsume) widget).linkHit = true;
                }
                return true;
            } else {
                Selection.removeSelection(buffer);
                Touch.onTouchEvent(widget, buffer, event);
                return false;
            }
        }
        return Touch.onTouchEvent(widget, buffer, event);
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案未经测试

基于此,我建议您像这样修复文件TwitterLinkify.java(设置链接移动的函数):

private static final void addLinkMovementMethod(TextView t) {
    MovementMethod m = t.getMovementMethod();

    if ((m == null) || !(m instanceof LocalLinkMovementMethod)) {
        if (t.getLinksClickable()) {
            t.setMovementMethod(LocalLinkMovementMethod.getInstance());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢