i有一个SpannableString
集作为我的TextView
的文本,它在另一个带有点击处理程序的视图中。我的文本中有 ClickableSpan
s,你是对的,可单击的。
我的问题是,如果单击可点击跨度,我需要捕获触摸事件,而(因为父母有另一个点击处理程序)。
容器视图只是我的应用程序中帖子的供稿,这些帖子可以包含主题标签/提及/链接等。如果用户点击主题标签,则应转到由可点击跨度处理的标签,否则否则,他们应该转到由容器本身处理的帖子。
是否有任何直接的机制可以实现此功能?
我想出了一个可怕的反图案解决方案,效果很好。
在我的应用程序类中,我定义了:
public static boolean shouldIgnoreNextTouchEvent = false;
在我的 ClickableSpan
s单击处理程序中,我设置了一个全局标志,以避免下一个触摸事件为true:
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
App.shouldIgnoreNextTouchEvent = true;
...
}
}
然后在我父母视图的处理程序中:
@Override
public void onClick() {
if(App.shouldIgnoreNextTouchEvent){
App.shouldIgnoreNextTouchEvent = false;
return;
}
...
}
我知道这不是一个好的解决方案,但它的作用就像魅力。
交替,
- 在生成点击事件的小部件中添加标签
`
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
widget.setTag("hashtag"); // or anything else
}
}
`
- 在父母中,检查标签是否存在。如果是这样,则已被ClickableSpan 消耗
`
@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 ...
}
`