0

我使用适配器,ListView这是实现getView

@Override
public View getView(int position, View convertView, ViewGroup parent){
    ItemViewHolder viewHolder;
    if(convertView == null){
        convertView = (RelativeLayout)inflater.inflate(resource,parent, false);
        viewHolder = new ItemViewHolder();
        viewHolder.itemTextName = (TextView)convertView.findViewById(R.id.item_name);
        viewHolder.itemTextExpDate = (TextView)convertView.findViewById(R.id.item_exp_date);
        viewHolder.itemImage = (ImageView)convertView.findViewById(R.id.item_image);

    }
    else{

        viewHolder = (ItemViewHolder)convertView.getTag();
    }

    Item item = listItem.get(position);
    if(listItem != null){
        viewHolder.itemTextName.setText(item.getName());
        viewHolder.itemTextExpDate.setText(""+item.getDaysleft());
        viewHolder.itemImage.setImageBitmap(item.getImage());       
    }
    return convertView;
}

static class  ItemViewHolder  {
    View baseView;
    TextView itemTextName;
    TextView itemTextExpDate;
    ImageView itemImage;


}

当我设置BitmapImageViewListView流畅。

我是否实现了正确的代码getView

4

2 回答 2

0

尝试convertView.setTag(viewHolder)在 if 块中添加 :。此外,使用Universal Image Loader 之类的方法在列表视图中加载图像

于 2013-10-10T19:34:19.097 回答
0

看看这个简单的代码如何使用Holder 模式的简单实现,你必须只将它外部化

在开始使用 Integer.toString 或其他东西

viewHolder.itemTextExpDate.setText(""+item.getDaysleft());

当您使用 setImage... getView 将被多次调用。

为什么要检查它是否为空,并且使用它的速度快 1 行?没有意义。

if(listItem != null){
        viewHolder.itemTextName.setText(item.getName());
        viewHolder.itemTextExpDate.setText(""+item.getDaysleft());
        viewHolder.itemImage.setImageBitmap(item.getImage());       
    }

最重要的是,您没有在 View 上设置持有人,此代码不会为您崩溃?

看题目:

懒加载 getView多次 调用getView多次调用2

于 2013-02-03T11:35:18.680 回答