我有一个画廊,有一个适配器连接到它。在 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/