我将SpannableString
设置为TextView
的文本,该文本位于另一个具有点击处理程序的视图中。我的文字中有ClickableSpan
个,你是对的,可以点击。
我的问题是,如果在可点击范围内点击并且不传播到父视图,我需要捕获触摸事件(因为父级有另一个点击处理程序)。
容器视图只是我应用中的帖子提要,这些帖子可以包含主题标签/提及/链接等。如果用户点击主题标签,他们应该转到由可点击范围处理的主题标签,否则,他们应该去邮局,邮箱由集装箱本身处理。
是否有任何直接的机制来实现此功能?
答案 0 :(得分:1)
我想出了一个效果很好的反模式解决方案。
在我的app类中,我定义了:
public static boolean shouldIgnoreNextTouchEvent = false;
在我的ClickableSpan
点击处理程序中,我设置了一个全局标志,以避免下一次触摸事件为真:
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
App.shouldIgnoreNextTouchEvent = true;
...
}
}
然后在我父视图的处理程序中:
@Override
public void onClick() {
if(App.shouldIgnoreNextTouchEvent){
App.shouldIgnoreNextTouchEvent = false;
return;
}
...
}
我知道这不是一个好的解决方案,但它就像一个魅力。
答案 1 :(得分:0)
或者,
`
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
widget.setTag("hashtag"); // or anything else
}
}
`
`
@Override
public void onClick(View view) {
String tag = (String) view.getTag();
if(tag.equals("hashtag"){
// Already consumed by child (ClickableSpan)
return;
}
// rest of your code ...
}
`