【问题标题】:Scrolling issues with GridView in AndroidAndroid 中 GridView 的滚动问题
【发布时间】:2020-01-01 18:59:40
【问题描述】:

我在非常简单的 GridView 中遇到了奇怪的滚动问题。 Grid 中的每个项目都只是一个 ImageView 和一个 TextView。活动本身只是一个应用程序选择器。它看起来像是 Android 中基本 App Tray 的粗略版本。

问题是,在我的视图滚动了一段时间后,它不可避免地会让我继续滚动超过顶行图标,到一个空白屏幕,滚动条会消失,让我卡住。

并不是每次我转到视图顶部时都会发生这种情况,只是有时,通常只有在过度滚动之后才会发生。

如果我碰巧注意到问题并在屏幕底部的第一行消失之前发现了问题,我通常可以向后滚动视图并发现一些图标丢失。网格中有空白区域,我只能假设这些图标已被移动到某个奇怪的位置,这使得视图可以滚动到顶部。

这是我第一个超越基本 Hello World 的 Android 应用程序,因此很可能我只是在布局文件中搞砸了一些东西。我也意识到这可能是一个非常令人困惑的描述,所以我希望有人经历过这个,而我的搜索能力根本无法找到它。

如果有人认为有用,我可以发布我的布局文件或其他代码。

哦,该程序是针对 1.5 构建的,但在我的手机上运行的是 2.2(无论是上周偷偷摸摸的 2.2 的什么状态)。我没有足够的应用程序在模拟器上对此进行测试,但如果有人认为有必要,我可能会设置一些东西。

在此先感谢您提供有关此问题的任何帮助。

【问题讨论】:

  • 请发布 1) 您的活动/列表/项目布局和 2) 您的适配器代码
  • 你能解决吗,我遇到了这个问题

标签: android


【解决方案1】:

我有同样的问题,但我只发帖到GridView ImageView 的所以 pengwang 的回答对我没有帮助。我找到了这个错误的解释https://code.google.com/p/android/issues/detail?id=16218

问题在于 GridView 目前无法处理不同高度的项目。

我的解决方案是对所有GridView 的项目使用完全相同的layout_height

【讨论】:

  • 感谢这个。奇怪的症状。
  • 谢谢,这帮助我解决了类似的问题。首先,我从getView(final int position, View convertView, ViewGroup parent) 以编程方式添加了一些TextViewButton,然后我使用getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {...} 来获得每行的最大高度。最后。我使用最后一列位置设置每个子高度,使用viewGroup.getChildAt(position) 在每行的View 之间移动。
【解决方案2】:

我已经解决了:在链接GridView cannot show image你可以试试

【讨论】:

    【解决方案3】:

    似乎如果您滚动 GridView 的底部并再次快速返回几次,您最终会注意到视图的元素会从原来的位置向“左侧”移动一个位置。发生这种情况时,您可以一直滚动到 GridView 的顶部。当您确实到达列表顶部时,不显示第 0 项,将第 1 项放在它的位置,并且该行上方只有黑色。

    在这种情况下单击任何项​​目都会重置列表,一切都会恢复正常。

    这一定是一个错误。它具有高度可重复性,而且我认为我所做的任何事情都不会导致混淆。此时,向列表适配器的添加已停止。

    现在我正在使用 Android 2.3.3。

    【讨论】:

    【解决方案4】:

    我自己也遇到了同样的问题——我有一个高度不同的图像网格。在阅读了 Android 开发人员关于 GridView、GridView.LayoutParams 和 GridLayout 的文档后,我做了两件事来解决我的问题:

    1. 在每一行中找到最高的图像,并将高度存储在 row -> rowHeight 的映射中。我下载的每张图片都有宽度和高度信息,所以我很容易通过覆盖我的适配器的 addAll(items) 方法来做到这一点。

    2. 在 getView() 中,我创建了一个 GridView.LayoutParams(MATCH_PARENT, getRowHeight(position)),它将每个网格项设置为其特定行的最大行高。

    3. 将我的 ImageView 包装在 LinearLayout 中。我尝试过其他布局,但 LinearLayout 是可行的。为图像视图设置 android:scaleType="fitCenter" 和 android:adjustViewBounds="true"。

    经过以上 3 个步骤,我终于让网格看起来正确,它们有不同的高度,并且没有滚动问题。

    【讨论】:

      【解决方案5】:

      我有一个类似但可能不太常见的问题,只需滚动一点就会将 gridview 滚动到最后,而我根本无法向上滚动。这仅在 gridview 较小时发生,例如当键盘可见时。问题是我使用了:

          android:paddingBottom="400dp"
          android:clipToPadding="false"
      

      使填充底部更小解决了我的问题。我希望这至少对某人有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多