我在getView()上阅读了所有其他帖子,但没有找到任何解决方案。我有一个带有SimpleCursorAdapter的GridView。我记录(位置);在getView()中,我看到一个这样的模式:
0,0,1,0,0,2,0,0,3,0,0,4,0,0,5等。这意味着我必须构建3个视图,因为它为每个新视图滚动显示的视图,它的波涛汹涌和滞后。为什么这样做?我没有任何明显的设置我的gridview包装内容或其他任何奇怪的东西。我的代码没什么奇怪的。可能有一个因素是每个项目视图可能具有不同的高度,具体取决于我正在显示的文本的长度。
我目前正在调试4.2.2 Galaxy Nexus。
答案 0 :(得分:1)
在gridview度量/布局传递中请求索引0。
问题没有详细说明,但以下内容可以解释您所看到的模式:
GridView
位于需要两个度量/布局传递的布局中(例如LinearLayout
带权重,RelativeLayout
带有布局依赖性规则)。这解释了两个位置0。
每个getView()
都会导致父级重新布局。这解释了每个职位后的职位0。
答案 1 :(得分:0)
确保listview的高度不是wrap_content
并使其成为fill_parent。
希望有所帮助。
答案 2 :(得分:0)
正如我在问题的评论中所写,我注意到getView()
在位置0被调用,即使该位置根本没有被看到。我认为原因是需要通过网格来测量项目。
这一点并没有让我感到困扰,但是当它做了很多事情并且向下滚动网格时,让我很困扰。特别是当它重新绘制甚至看不到的元素时。
我解决它的方法是,当请求getView(0)并且不应该看到项0时,意味着完成测量,我返回一个已经绘制的实际视图(重新使用转换后的视图),避免重新绘制位置0
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Workaround Android requesting position 0 even though it doesn't draw it.
AbsListView listView = (AbsListView) parent;
int firstVisiblePosition = listView.getFirstVisiblePosition();
if (position == 0 && firstVisiblePosition > 10) {
if (convertView == null) {
convertView = actualPaint(position, convertView, parent);
}
return convertView;
}
convertView = actualPaint(position, convertView, parent);
return convertView;
}