Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关于GridView:getView()从第一个位置自动调用到最后一个位置_Android_Call - Fatal编程技术网

Android 关于GridView:getView()从第一个位置自动调用到最后一个位置

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):

我遇到了一个奇怪的问题。一旦我的活动初始化,gridView将调用getView方法初始化其中的所有项。但是我没有做任何事情,我甚至没有触摸屏幕,但是gridview确实从第一个位置到最后一个位置加载图片。这是我的日志:

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多张图片,加载它们需要很多时间。只需在当前屏幕上加载图像~这就是我想要的