Welcome

首页 / 软件开发 / .NET编程技术 / 为何ListView中getView被重复调用

为何ListView中getView被重复调用2014-03-28 博客园 laozhu1124我用ListView显示数据时,自定义了一个适配器(extends ArrayAdapter),然后重写了getView方法 ,现在出现一个问题,就是这个getView()方法被重复调用了,比如我的_data中有两条数据,但是 log.i("show",house.toString());这句却被执行了4次甚至更多,请问各位这是神马情况?

方法代码如下:

这是自定义的适配器:

package com.hb.puppet.utils;import java.util.List;import com.hb.puppet.activity.MetaData;import com.hb.puppet.activity.R;import com.hb.puppet.entity.House;import android.content.Context;import android.graphics.drawable.Drawable;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class CustomCollectAdapter extends ArrayAdapter<House> {private static final String CLASSTAG = CustomCollectAdapter.class.getSimpleName();private ListView _listView;private int _resource;private List<House> _data;private LayoutInflater _inflater;private AsyncLoadImageTask _asyncloader;public CustomCollectAdapter(Context context, ListView listView,List<House> data) {super(context, 0, data);_resource = R.layout.list_item_collect;_data = data;_inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);_asyncloader = new AsyncLoadImageTask();_listView = listView;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = convertView;CollectListItemViewCache viewCache = null;//final int index = position;//final ViewGroup p = parent;if (view != null) {viewCache = (CollectListItemViewCache) view.getTag();} else {view = _inflater.inflate(_resource,null);viewCache = new CollectListItemViewCache(view);view.setTag(viewCache);}// 房源数据House house = _data.get(position);System.out.println(house.toString());if (house != null) {//http://www.xxx.com/xxx.jpgString imageUrl = MetaData.HOST + house.getTitlePic();ImageView imageView = viewCache.getImageView();imageView.setTag(imageUrl);//异步加载图片 new AsyncImageLoaderTask().execute(imageUrl,imageView);// 房源标题TextView houseTitle = viewCache.getHouseTitle();houseTitle.setText(house.getTitle());// 房源单价TextView housePrice = viewCache.getHousePrice();housePrice.setText(house.getSinglePrice() + "元/㎡");// 房源面积TextView houseArea = viewCache.getHouseArea();houseArea.setText(house.getArea() + "㎡");// 房源户型TextView houseUnit = viewCache.getHouseUnit();houseUnit.setText(house.getUnits());// 单项删除收藏房源Button delButton = viewCache.getDelButton();delButton.setOnClickListener(new OnClickListener() {public void onClick(View v) {System.out.println("clicked");}});}return view;}}