2014-11-03 70 views
0

我知道這個問題已被問及之前,我已經嘗試過這些解決方案,但它沒有幫助。項目在第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; 
} 

如果我做的如果,所有的圖像不斷重裝和奇怪的事情發生(例如,已加載的圖像將使用不同的映像重新裝載,如果我滾動頁面上)外設置的功能。

我在這裏做錯了什麼?

+0

你有沒有仔細檢查你的項目數據(如'Array'或'ArrayList')?基本上,適配器所做的只是將您的項目數據顯示到分配的列表視圖中。 – Harry 2014-11-03 04:45:00

回答

0

您需要將代碼中將數據鏈接到if語句之外的視圖部分。

ListView項目被回收。在滾動的時候,保存第1行數據的listview項目現在可以用來顯示第10行。這個循環視圖發送給getView,並且由於它不爲空,它會跳過代碼中將數據鏈接到視圖元素的部分。除非您寫下當前存在的內容,否則它將繼續顯示第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); 
+0

當我使用通用圖像加載程序時出現問題。如果我在if之外使用它,如果在向上或向下滾動列表時向我的圖像瀏覽中重新加載錯誤的圖像。 – Asim 2014-11-03 06:17:04

+0

你的圖像加載器是異步的嗎?嘗試慢速滾動(等待每個圖像完全加載,然後顯示下一行)並查看是否加載了正確的圖像。讓我知道結果。 – NameSpace 2014-11-03 07:06:27