【问题标题】:Android OnLongClickListener strange / unreliable behaviourAndroid OnLongClickListener 奇怪/不可靠的行为
【发布时间】:2011-04-04 04:34:51
【问题描述】:

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

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

【问题讨论】:

    标签: android click listener behavior long-click


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的洞察力 :) 猜猜我们可以在 Android 6 中进行修复,如果我们很幸运的话......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多