我正在使用一个自定义BaseAdapter,它使用高度略有不同的项目(ImageViews)填充5x3 GridView。
向上滚动直到某些项目(但不是全部连续!)隐藏在顶部然后向下滚动,隐藏的项目将不再显示。
尝试使用登录getView(),实际上getCon()根本没有为这些项调用,而我认为它应该被调用。
这是一个GridView错误吗?
我正在研究真正的设备KK4.4.2和模拟器5.1,同样的问题。
以下是一些代码:
public class GVAdapter extends BaseAdapter {
private int columnWidth;
private String uri[];
public GVAdapter(Context context, String[] uri, int colWidth) {
this.uri = uri;
this.columnWidth=colWidth;
}
public View getView(int position, View convertView, ViewGroup parent) {
Log.v("GVAGETVIEW", "pos="+position+" String="+uri[position]);
View gridView=null;
if(convertView==null) {
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
gridView=inflater.inflate(R.layout.grid_view_module, null);
} else {
gridView=convertView;
}
ImageView imageView=(ImageView)gridView.findViewById(R.id.image_View_grid_item);
float ratio=somecodeToGetAspectRatioFromUri(uri[position]);
int columnHeight=(int)(columnWidth/ratio);
Bitmap b=Bitmap.createBitmap(columnWidth, columnHeight, Bitmap.Config.ARGB_8888);
b=someCodeToGetBitmapFromUri(uri[position]);
imageView.setImageBitmap(b);
imageView.getLayoutParams().width=columnWidth;
imageView.getLayoutParams().height=columnHeight;
return gridView;
}
@Override
public int getCount() {
return arrayValues.length;
}
@Override
public Object getItem(int position) {
return uri[position];
}
@Override
public long getItemId(int position) {
return position;
}
}
的修改:
尝试imageView.getLayoutParams().height=columnWidth;
(固定高度),滚动似乎工作正常,getView()被正确调用。
还尝试使用具有相同结果的ViewHolder。
编辑2 :
现在我最终把所有物品都做了同样的高度,悲伤的解决方法......