[英]ListView items repeating
我知道之前曾有人問過這個問題,我已經嘗試過這些解決方案,但沒有幫助。 項目在第9個項目之后不斷重復。 這是我的代碼。
@Override public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.tile_company, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.companyname);
holder.type = (TextView) convertView.findViewById(R.id.companytype);
holder.logo = (ImageView) convertView.findViewById(R.id.logo);
holder.category = (ImageView) convertView.findViewById(R.id.category);
holder.distance = (TextView) convertView.findViewById(R.id.distance);
holder.time = (TextView) convertView.findViewById(R.id.time);
convertView.setTag(holder);
new GetDistanceTime().execute(LocateOutlets.userLatlng, companyList.get(position).getCompanyLatLng(), holder.distance, holder.time);
holder.name.setText(companyList.get(position).getCompanyDiscout() + "% Off In Store");
holder.type.setText(companyList.get(position).getCompanyName());
imageLoader.displayImage(companyList.get(position).getCompanyLogo(), holder.logo);
imageLoader.displayImage(getCategoryImage(companyList.get(position).getCompanyType()), holder.category);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
static class ViewHolder
{
TextView name;
TextView type;
ImageView logo;
ImageView category;
TextView distance;
TextView time;
}
如果我在if之外執行set函數,則所有圖像都會繼續重新加載,並且會發生奇怪的事情(例如,如果我向上滾動頁面,則已經加載的圖像會重新加載其他圖像)。
我在這里做錯了什么?
您需要在if語句之外移動將數據鏈接到視圖的代碼部分。
ListView項目被回收。 這意味着在滾動時,包含第1行數據的列表視圖項現在可能會用於顯示第10行。 此回收的視圖發送到getView,由於它不是null,因此跳過了將數據鏈接到view元素的代碼部分。 除非您覆蓋當前的內容,否則它將繼續顯示第1行(或先前分配給它的任何行)中的數據。
因此,您希望將代碼中將數據鏈接到視圖的部分移到if語句之外。
ViewHolder holder;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.tile_company, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.companyname);
holder.type = (TextView) convertView.findViewById(R.id.companytype);
holder.logo = (ImageView) convertView.findViewById(R.id.logo);
holder.category = (ImageView) convertView.findViewById(R.id.category);
holder.distance = (TextView) convertView.findViewById(R.id.distance);
holder.time = (TextView) convertView.findViewById(R.id.time);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
//I moved this block out of your if-statement
new GetDistanceTime().execute(LocateOutlets.userLatlng, companyList.get(position).getCompanyLatLng(), holder.distance, holder.time);
holder.name.setText(companyList.get(position).getCompanyDiscout() + "% Off In Store");
holder.type.setText(companyList.get(position).getCompanyName());
imageLoader.displayImage(companyList.get(position).getCompanyLogo(), holder.logo);
imageLoader.displayImage(getCategoryImage(companyList.get(position).getCompanyType()), holder.category);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.