ListView显示项目的图像不正确

时间:2012-10-11 15:50:55

标签: android

我可以将图片添加到我的ListView并且可以显示,但如果列表中的项目超过8,则ListView会显示该项目的错误图像。这是我的newView()方法:

public View newView(Context context, Cursor cursor, ViewGroup parent){
    final LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(layout, parent, false);
try{
        int count = cursor.getCount();
        String image = cursor.getString(cursor.getColumnIndex(RecipeClasses.Recipe.RECIPE_IMAGE));
        String recipe_name = cursor.getString(cursor.getColumnIndex(RecipeClasses.Recipe.RECIPE_NAME));

        Uri path = Uri.parse(image);
        TextView recipe_txt = (TextView) view.findViewById(R.id.txt_recipe_row);
        ImageView img = (ImageView) view.findViewById(R.id.img_view_recipe);
        if (new File(image).exists()) {
            ImageResizer img_W = new ImageResizer(context, img.getMeasuredWidth(), img.getMeasuredHeight());
            img_W.loadImage(image, img);
        } else {
            ImageResizer img_W = new ImageResizer(context, img.getMeasuredWidth(), img.getMeasuredHeight());
            img_W.loadImage(path, img);
            img.setImageURI(path);
        }

        if (recipe_txt != null){
            recipe_txt.setText(recipe_name);
        }
    } catch (Exception e){
        // TODO: handle exception
    }

    return view;
}

2 个答案:

答案 0 :(得分:2)

我假设你的newView类似于getView方法。你确定想要获得第9个项目的图像是否可用?

尝试将Cursor处理成ArrayList,然后更容易按顺序管理以确定确切的问题。

同时检查新添加的图像的路径格式,因为它们在尝试将它们分配到指定路径时可能不正确。

答案 1 :(得分:0)

此刻设置的方式意味着每次通过适配器时它都会膨胀一个新视图。这很昂贵,特别是对于图像。

使用此检查重新使用初始视图:

View v;
if (view == null) {
    view = inflater.inflate(layout, parent, false);
}

这样,布局只会膨胀一次并重复使用。