Android OnLongClickListener奇怪/不可靠的行为

时间:2010-08-26 09:56:20

标签: android click listener behavior long-click

我目前正在与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 ...我还没有找到让它可靠地工作的方法。 ..

如果有人能给我一个提示,我真的很感激...我的智慧结束了:(

2 个答案:

答案 0 :(得分:1)

在个人情况下,我最终在每次重播后重新设置了听众。

答案 1 :(得分:0)

我也遇到过这个问题。似乎如果视图布局以一种需要修改子视图边界的方式改变(即TextView是wrap_content宽度并且您将其文本设置为比之前更长/更短的值),则层次结构中的视图将具有其{{被调用的方法(很可能是由于布局传递,尽管我没有深入挖掘以确定)。如果您查看onStartTemporaryDetach的来源View最终取消设置视图的按下状态。

更改布局中的视图,这些视图将定期更新,以便无论您设置的值如何都不会更改,这样可以解决问题。虽然,这仍然不是很棒。