【问题标题】:ScrollView with Buttons inside, no response until second click on any button insideScrollView 里面有按钮,直到第二次点击里面的任何按钮才响应
【发布时间】:2011-05-02 22:41:50
【问题描述】:

我已经尝试了几天试图解决这个问题,但我无法弄清楚。问题是,简单的活动,具有简单的布局,ScrollView -> LinearLayout -> 和布局内的许多按钮(在滚动内容内)。一切正常,但有一件棘手的事情。当我单击一个按钮时,假设在滚动内容的顶部并立即向下滚动到内容的底部并单击那里的另一个按钮,直到我再次单击并且一切都恢复正常之前什么都没有发生。这可以随时复制,并且与代码无关(我已经尝试了 20 多个场景)。我在 Android 方面还没有太多经验,但看起来滚动侦听器停止了 onClick 侦听器或类似的东西。对此的任何帮助将不胜感激。提前谢谢你。

PD。如果我以编程方式执行scrollTo(),而不是用手指手动滚动,那么一切正常,并且在第一次触摸时点击响应。这简直让我不知所措。

【问题讨论】:

  • @esenian:创建一个演示问题的示例项目。将该项目上传到某处(例如,作为 ZIP 文件)。在此处发布指向该链接的链接,并在以@CommonsWare 为前缀的评论中,以便我知道您发布了它。
  • @CommonsWare 我在这里上传了一个项目megaupload.com/?d=U69RRBAW 真的很简单,布局,没有动作,只需按下按钮1,向下滚动并按下按钮14。你会明白我的意思(没有橙色框在按钮上直到第二次点击)。非常感谢您的宝贵时间。
  • @esenian:MegaUpload 说文件不可用。通过编辑您的问题,或者使用gist.github.com 或类似的“pastebin”服务,发布您的 Activity 类 Java 源代码和布局 XML 文件(如果有)可能就足够了。
  • @CommonsWare 很抱歉给您带来不便。我使用 github gist.github.com/656821 上传主要活动和布局。正如我所说的没有功能的非常简单的代码,但我认为它说明了我的意思。非常感谢。
  • 你是怎么解决你的问题的?

标签: android scrollview


【解决方案1】:

我也有同样的问题。 我不同意这是一个褪色的滚动条问题。如果你禁用淡入淡出,同样的事情会发生。

在themes.xml中尝试了几种方法:

<item name="android:scrollbarDefaultDelayBeforeFade">100</item>
<item name="android:scrollbarFadeDuration">100</item>
<item name="android:fadeScrollbars">true</item>

但没有任何帮助。 似乎这是带有滚动视图的系统问题。 这可能有助于了解发生了什么:

setOnScrollListener(new OnScrollListener(){
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
      // TODO Auto-generated method stub
    }
    public void onScrollStateChanged(AbsListView view, int scrollState) {
      // TODO Auto-generated method stub
      if(scrollState == 0) Log.i("a", "scrolling stopped...");
    }
  });
}

但是(不幸的是)这无助于解决问题 - 而是解释它。

注意:仅当您使用 ScrollView 时才会发生这种情况。 ListView 没有这个问题。

有人有其他想法吗?

【讨论】:

  • 也许您已经找到了解决方案?看起来它与滚动加速有关(即使滚动立即在最顶部/底部停止,更硬的滑动动作也会导致更长的延迟),但我不知道如何解决它。
【解决方案2】:

一切正常。

当您开始滚动时,ScrollView 将声明触摸事件,直到您停止触摸屏幕一段时间。在 Android 2.2 中,您会知道何时认为滚动完成,因为右侧的滚动条会逐渐消失。

【讨论】:

  • 好的,我明白你的意思。所以我认为当滚动视图停止滚动时(至少在视觉上),当滚动视图要求触摸事件时,没有选项可以减少时间......?我知道时间不多,可能只有 0.5 秒,但很烦人。如果有办法那就太好了。无论如何,非常感谢您的回答。
  • @esenian:“所以我认为当滚动视图停止滚动(至少在视觉上)后,当滚动视图要求触摸事件时,没有选项可以减少时间......?” ——我不知道。请记住,Buttons 列表中的 ScrollView 不是您会看到许多生产应用程序使用的技术。
  • 当然你是对的,再次感谢你,我认为这是谷歌新的 YouTube 应用程序的方法。它似乎有一个水平滚动视图,其中填充了模拟“滚动标签”的按钮。我已经让它工作了,看起来几乎一样,但是点击延迟的问题很烦人。现在我看到应用程序本身也有同样的滞后行为,所以我的方法必须非常接近。在我看来这很好。我将尝试查看滚动视图代码,看看这次我是否可以覆盖哪些控件。真的谢谢你。
【解决方案3】:

我遇到了这样的情况。我有一个 ExpandableListView,它只是表现正常。当我将手机旋转到水平并向后旋转时,一组 ExpandableListView 中的某些项目将不会响应点击事件。除非我滚动列表视图,或者单击这些项的组项,否则该事件将调度到我之前单击的项,并正确执行单击侦听器代码。

这发生在 android 2.3 和 4.0...

【讨论】:

    【解决方案4】:

    我已经能够通过覆盖 onScrollChanged 来解决此问题,然后在达到边界时通过 OnTouchEvent 向 ScrollView 发送 MotionEvent 以模拟用户触摸。

    这是我能想象到的最老套、最肮脏的编程,但它在我的应用程序中运行良好。此应用仅适用于运行 2.2 的手机,需要以某种方式修复此错误。

    如果有人有更好的解决方案,请告诉我。

    编辑:顺便说一句,这个问题只存在于 2.2 中,他们已在 2.3 中修复它,而在 2.1 中它不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2016-09-26
      • 2013-04-02
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多