向下滚动时不调用Android自定义BaseAdapter getView(),具有不同高度的项目

时间:2016-04-13 15:41:03

标签: android gridview baseadapter

我正在使用一个自定义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
现在我最终把所有物品都做了同样的高度,悲伤的解决方法......

0 个答案:

没有答案