益智~~~我遇到了一个奇怪的问题。这是我的活动init,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 Projext:
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没问题?它运作良好,但我的项目很糟糕。
答案 0 :(得分:0)
已经有很多人已经问过这个问题了。我也在使用自定义适配器使用ListView。我可以向你保证,
对于任何给定位置调用getView()的次数绝对无法保证
我的情况是,ListView
从开始到结束也调用了所有getView()
功能,然后再从0到3调用它(对于我的手机,屏幕上有4个项目) )。无论如何,让getView
尽可能快地做事总是好的,因为当你滚动GridView
时也会调用它,没有人能告诉你将给出哪个位置。
修改强>
最重要的部分是我放在盒子里的那个。我之前很少使用GridView
,但我认为它的行为在ListView
上大致相同,因为它们都使用了回收的View
和Adapter
。看了你的评论后,我在我的手机和朋友的手机上测试了GridView
和ListView
,并发现了很大的不同:
ListView
和GridView
都会在初始化时为所有项目拨打getView()
,然后再次呼叫getView()
以查看屏幕上的项目getView()
仅调用显示的项目。我可以断定它是依赖于操作系统的吗?我的结论是正确的,我相信你不应该将ViewTreeObserver
视为你的问题。