我目前正在与Android Api Lvl 8上的OnLongClickListener作战。
拿这段代码:
this.webView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
System.out.println("long click");
return true;
}
});
完美无缺。我可以按下WebView上的任意位置,每次都触发事件触发器。
现在看一下这个:
this.webView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
final EditText editText = getUrlTextField();
switch (editText.getVisibility()) {
case View.VISIBLE:
editText.setVisibility(View.GONE);
return true;
case View.GONE:
editText.setVisibility(View.VISIBLE);
return true;
default:
return false;
}
}
});
假设URL EditText组件当前可见,它将从显示中消失,并在触发另一个长按事件时再次显示。 但是如果你运行它,当一个人在WebView上的任何一个位置上执行长按时,该事件只运行一次(!)。为了使事情变得复杂,当在网站上的链接上执行时,长按会再次起作用...
任何人都可以解释它是否是sdk中的错误和/或我是否在思考OnLongClickListener是如何工作的? :/
修改
我现在已经在Nexus One上运行了几个不同的场景,并得出以下结论:在运行时更改或更少的布局会杀死OnLongClickListener ...我还没有找到让它可靠地工作的方法。 ..
如果有人能给我一个提示,我真的很感激...我的智慧结束了:(
答案 0 :(得分:1)
在个人情况下,我最终在每次重播后重新设置了听众。
答案 1 :(得分:0)
我也遇到过这个问题。似乎如果视图布局以一种需要修改子视图边界的方式改变(即TextView是wrap_content宽度并且您将其文本设置为比之前更长/更短的值),则层次结构中的视图将具有其{{被调用的方法(很可能是由于布局传递,尽管我没有深入挖掘以确定)。如果您查看onStartTemporaryDetach
的来源View
最终取消设置视图的按下状态。
更改布局中的视图,这些视图将定期更新,以便无论您设置的值如何都不会更改,这样可以解决问题。虽然,这仍然不是很棒。