2

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

如果有人能给我一个提示,我将不胜感激......我无能为力:(

4

2 回答 2

1

就个人而言,我最终在每次重新布局后重新设置了侦听器。

于 2012-03-19T13:37:21.710 回答
0

我也遇到过这个问题。似乎如果视图布局以需要修改子视图边界的方式发生变化(即 TextView 是 wrap_content 宽度并且您将其文本设置为比以前更长/更短的内容),层次结构中的视图将onStartTemporaryDetach调用其方法(很可能是由于布局通行证,尽管我还没有挖得足够深,无法确定)。如果您查看源代码ViewonStartTemporaryDetach最终会取消设置视图的按下状态。

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

于 2013-06-25T23:35:59.060 回答