热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android–ListViewsetOnItemClickListener在项目中有链接时不会触发

我正在努力在一个应用程序中集成Twitter,虽然所有工作,因为我应该在setOnItemClickListener()时难以触发当ListView项目中有链接时.当一个项目中没有

我正在努力在一个应用程序中集成Twitter,虽然所有工作,因为我应该在setOnItemClickListener()时难以触发当ListView项目中有链接时.当一个项目中没有链接(URL)时,它可以正常工作.

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

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

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

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

那么我该怎么做才能使setOnItemClickListener()忽略项目中的链接?

更新:

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

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

这就是当前流程的样子:

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

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

解决方法:

你可能想看看babay’s answer on ListView: TextView with LinkMovementMethod makes 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);
}
}

解决方案未经测试

基于它,我建议你修复文件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());
}
}
}

谢谢


推荐阅读
author-avatar
煙feldker_231
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有