2016-11-18 48 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(持有人); –