2016-11-18 45 views
0

Ι有一個ListView適配器,用於加載籃球隊比賽。如果是應用程序的團隊,我正在使用畢加索或資源加載我的圖像。在我的第一個項目上,似乎從網上加載了兩隊的圖片。這是一個示例代碼和圖像。第一項使用picasso的Android ListView錯誤

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View view = convertView; 

    if (convertView == null) { 
     view = LayoutInflater.from(context).inflate(layoutResource, parent, false); 
    } 

    Match programItem = getItem(position);  
    ImageView ourTeamLogo = (ImageView) view.findViewById(R.id.program_item_our_team_logo);  
    ImageView foeLogo = (ImageView) view.findViewById(R.id.program_item_foe_logo); 

    if (programItem.isHome()) { 

     ourTeamLogo.setImageResource(R.drawable.our_team_logo); 

     Picasso.with(context). 
       cancelRequest(foeLogo); 
     Picasso.with(getContext()) 
       .load(programItem.getFoeLogoURL()) 
       .fit().placeholder(R.drawable.placeholder_team).into(foeLogo);   
    } 
    else { 

     foeLogo.setImageResource(R.drawable.our_team_logo); 

     Picasso.with(context). 
       cancelRequest(ourTeamLogo); 
     Picasso.with(getContext()) 
       .load(programItem.getFoeLogoURL()) 
       .fit().placeholder(R.drawable.placeholder_team).into(ourTeamLogo); 
    } 

    return view; 
} 

見紅色標記的第一個項目:

enter image description here

+0

你有什麼問題。請解釋更多。 –

+0

標有紅色的第一個元素不應在兩側具有相同的圖像。如果我向下滾動它,則正確地回收視圖。 –

+0

你在代碼中實現了ViewHolder嗎? –

回答

0

找到解決方案,看起來像我需要添加

Picasso.with(context).cancelRequest(holder.ourTeamLogo); Picasso.with(context).cancelRequest(holder.foeTeamLogo);

static class ViewHolder { 
ImageView ourTeamLogo, foeLogo; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    final ViewHolder holder; 
    if (convertView == null) { 
    view = LayoutInflater.from(context).inflate(layoutResource, parent, false); 
    holder = new ViewHolder(); 
    holder.ourTeamLogo = (ImageView) view.findViewById(R.id.program_item_our_team_logo); 
    holder.foeLogo = (ImageView) view.findViewById(R.id.program_item_foe_logo); 
} else { 
    holder = (ViewHolder) convertView.getTag(); 
} 

Match programItem = getItem(position); 

if (programItem.isHome()) { 

    holder.ourTeamLogo.setImageResource(R.drawable.our_team_logo); 

    Picasso.with(context). 
       cancelRequest(holder.ourTeamLogo); 
    Picasso.with(getContext()) 
      .load(programItem.getFoeLogoURL()) 
      .fit().placeholder(R.drawable.placeholder_team).into(holder.foeLogo); 
} else { 

    holder.foeLogo.setImageResource(R.drawable.our_team_logo); 
    Picasso.with(context). 
       cancelRequest(holder.ourTeamLogo); 
    Picasso.with(getContext()) 
      .load(programItem.getFoeLogoURL()) 
      .fit().placeholder(R.drawable.placeholder_team).into(holder.ourTeamLogo); 
} 

return view; 

}

0

的事情,我注意到,錯在你的代碼

Holder holder=null; 
if(view==null) 
{ 
    view = LayoutInflater.from(context).inflate(layoutResource, parent, false); 
    holder = new Holder(view, position); 
    view.setTag(holder); 
} 
else{ 
    holder=(Holder)view.getTag(); 
    } 
//Continue your code here 
+0

我會試試看,並會回覆給你。 –

+0

我需要製作持有人類嗎? –

+0

是的。保持ViewHolder是最佳做法。它將重用已經膨脹的視圖。無需再次膨脹相同的佈局。 –

0

可以這樣實現ViewHolder,

static class ViewHolder { 
    ImageView ourTeamLogo, foeLogo; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    final ViewHolder holder; 
    if (convertView == null) { 
     view = LayoutInflater.from(context).inflate(layoutResource, parent, false); 
     holder = new ViewHolder(); 
     holder.ourTeamLogo = (ImageView) view.findViewById(R.id.program_item_our_team_logo); 
     holder.foeLogo = (ImageView) view.findViewById(R.id.program_item_foe_logo); 
     view.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    Match programItem = getItem(position); 

    if (programItem.isHome()) { 

     holder.ourTeamLogo.setImageResource(R.drawable.our_team_logo); 

     Picasso.with(getContext()) 
       .load(programItem.getFoeLogoURL()) 
       .fit().placeholder(R.drawable.placeholder_team).into(holder.foeLogo); 
    } else { 

     holder.foeLogo.setImageResource(R.drawable.our_team_logo); 

     Picasso.with(getContext()) 
       .load(programItem.getFoeLogoURL()) 
       .fit().placeholder(R.drawable.placeholder_team).into(holder.ourTeamLogo); 
    } 

    return view; 
} 
+0

問題依然存在,scroll似乎覺得窒息了,你忘了view.setTag(holder);一旦添加它就像一個魅力。 –

+0

是的。現在我已經更新view.setTag(持有人); –