作者:煙feldker_231 | 来源:互联网 | 2023-09-25 19:09
我正在努力在一个应用程序中集成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());
}
}
}
谢谢