簡體   English   中英

ListView項目重復

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM