Android 关于GridView:getView()从第一个位置自动调用到最后一个位置
我遇到了一个奇怪的问题。一旦我的活动初始化,gridView将调用getView方法初始化其中的所有项。但是我没有做任何事情,我甚至没有触摸屏幕,但是gridview确实从第一个位置到最后一个位置加载图片。这是我的日志:Android 关于GridView:getView()从第一个位置自动调用到最后一个位置,android,call,Android,Call,我遇到了一个奇怪的问题。一旦我的活动初始化,gridView将调用getView方法初始化其中的所有项。但是我没有做任何事情,我甚至没有触摸屏幕,但是gridview确实从第一个位置到最后一个位置加载图片。这是我的日志: D/LocalGridViewAdapter(20843): getView() called at :0 D/LocalGridViewAdapter(20843): getView() called at :0 D/LocalGridViewAdapter(20843):
D/LocalGridViewAdapter(20843): getView() called at :0
D/LocalGridViewAdapter(20843): getView() called at :0
D/LocalGridViewAdapter(20843): getView() called at :1
D/LocalGridViewAdapter(20843): getView() called at :2
D/LocalGridViewAdapter(20843): getView() called at :3
D/LocalGridViewAdapter(20843): getView() called at :4
.....................................
D/LocalGridViewAdapter(20843): getView() called at :564
D/LocalGridViewAdapter(20843): getView() called at :565
我认为这是由ViewTreeObserver引起的,但我确实需要它来调整gridview项的布局,使图片看起来更漂亮。以下是我的ViewTreeObserver的代码,它来自Google bitmapFun项目:
gv.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (mAdapter.getNumColumns() == 0) {
final int numColumns = (int) Math.floor(gv.getWidth()
/ (GlobalConstants.mImageThumbSize
+ GlobalConstants.mImageThumbSpacing));
if (numColumns > 0) {
final int columnWidth = (gv.getWidth() / numColumns)
- GlobalConstants.mImageThumbSpacing;
GlobalConstants.reqSize = columnWidth;
mAdapter.setNumColumns(numColumns);
mAdapter.setItemHeight(columnWidth);
Log.d("~~~~~~~~~~~",
"onCreateView - numColumns set to " + numColumns);
}
}
}
});
我只是怀疑为什么Bitmapfun没问题?它工作得很好,但我的项目出了问题。有很多人已经问过这个问题了。我也在使用带有自定义适配器的ListView。我可以向你保证 对于任何给定位置调用getView的次数,绝对不能保证 在我的情况下,ListView从开始到结束还调用了所有getView函数,然后从0到3再次调用它,因为在我的手机上,屏幕上有4个项目。无论如何,让您的getView尽可能快地完成任务总是好的,因为当您滚动GridView时,它也会被调用,并且没有人能告诉您将给出哪个位置 编辑: 最重要的部分是我放在盒子里的那部分。我以前很少使用GridView,但我认为它在ListView上的行为基本相同,因为它们都使用循环视图和适配器。看了你的评论后,我在我的手机和我朋友的手机上测试了GridView和ListView,发现了一个很大的区别: 在我的手机上,ListView和GridView都在初始化时为所有项目调用getView,然后为屏幕上的项目再次调用getView。 在我朋友的手机上,getView只调用显示的项目。
我能断定它是依赖于操作系统的吗?我的结论是正确的,我相信你不应该把VIEWTE观察员考虑到你的问题。 E,如果我删除GRIDVIEW的VIEW视图,并给它一个固定的DP或像素,它将不会调用GETVIEW从第一个到最后一个它被输入。但是我想使用observer根据不同的屏幕更改gridView项的大小。在谷歌的BitmapFun项目中,它使用了observer,但没有遇到这个问题。我就是找不出来。我只是好奇,因为我的手机和你说的不一样。所以我借了我朋友的手机安卓4.2,我的是4.0.4。我根据结果编辑我的答案。我只是不希望它这样做,因为有500多张图片,加载它们需要很多时间。只需在当前屏幕上加载图像~这就是我想要的