Android Gallery View 和适配器 getView 被多次调用

标签 android image view gallery adapter

我有一个画廊,有一个适配器连接到它。在 getView 方法中,我有一个自定义布局,这样我就可以同时显示图像和标题

图像是从 URL 下载的,这是异步完成的,并且按预期工作。

目前我让每个项目都填满屏幕,所以我一次只显示一个项目,基本上我想让它像幻灯片一样。

让我说清楚,目前我有一个 Activity ,它只有一个 View ,即画廊。

当我滑动时出现问题,图像跳动并停留在同一图像上。我需要多次滑动,用力滑动,长时间滑动,然后才能转到下一张图片。

我在 getView() 的自定义适配器中放置了一条调试消息,似乎 getView 被调用了很多次(4 次),传递的位置是当前位置或前一个位置,这解释了为什么我卡在同一屏幕上。

如果我删除远程下载图像部分,或者只使用来自手机的静态图像,我不会再有任何问题,事实上,getView 只被调用一次,位置正确。

我很沮丧,不确定是什么问题,会不会是因为我正在异步下载图像,这会导致图像更新,从而导致 getView 再次被调用以重绘自身? 我不确定..

请帮忙

最佳答案

不幸的是,这是画廊的一个错误。无论数据是否异步更新, ListView 都可以很好地滚动。然而,图库的编码并没有达到 ListView 的水平

当图库尝试更新可见 View 时(由于您的图像加载回调),该 View 将“快速”返回到焦点位置。如果您在滚动时以任何方式更改 View ,它将捕捉。这可能就是为什么您必须用力滚动才能离开当前 View 的原因。它正在尝试在您的 View 上执行回调,只有快速滚动才能防止回调在您离开该 View 之前发生。

我刚才在这里报告了这个错误: Android Issues 如果您打算使用 Gallery,您可以尝试其中发布的一些解决方法。

不幸的是,它还没有引起 Android 开发者的注意。 看来这个问题是由于 View 被设置为“wrap_content”而画廊必须重新测量/重新绘制其 View 引起的

从那以后,我就不再使用图库,而是使用 ViewPager。它更容易管理,您不必担心这个问题。自画廊首次推出以来,这一直是画廊的一个已知问题。我不知道这是否已在任何较新的 Android 版本 (3.x/4.x) 中修复。从 2.3.7 开始,它不是固定的。

关于Android Gallery View 和适配器 getView 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400076/

相关文章:

android - 如何区分手势和点击?

android - 为什么在 Android 中使用 "AlertDialog.Builder"而不是 "AlertDialogBuilder"的奇怪命名约定

view - 映射以查看自定义字段名称 - 一对一关系

android - 从另一个 Activity 完成一个 Activity

jQuery externalWidth 给出零值(动态加载的内容)

javascript - 根据变量显示/隐藏图像

iphone - 在触摸iPhone sdk上绘制图像

sql - 通过 View 或函数重用 sql

android - LAYER_TYPE_SOFTWARE 在一段时间内不会在某些设备上禁用硬件加速

android - LoganSquare 在生成的 Json 中不包含字段名称