2013-03-15 77 views
1

我已经搜遍了SO,发现了4个类似的问题,但似乎这个问题是不同的种类。我也花了大约7个小时来解决这个单一的错误,并没有发现我做错了什么。Listview在第一行显示错误的图像

问题:
中的每一行ListView控件包含两个图像。当我启动活动时,第一行中的一个或两个imageView显示错误的图像,并且这仅在发生后有时发生。有时候,该行在启动后显示正确的图像。

当我向下滚动隐藏第一行,然后再次向上滚动时,图像将更改为正确的图像。

受审SOLUTION:
我只找到一个解决方案,是设置convertView = NULL在getView方法的开始。是的,这是有效的,imageView正确显示,但导致其他问题和错误。滚动变得不平滑,有时一些图像变得太小而不适应它。

注:
有数据,数据获取正确的每行没问题,以后我运行调试。

我的代码
MatchAdapter.class getView方法

public View getView(int position, View convertView, ViewGroup parent) { 
    Match entry = listMatch.get(position); 

    MatchAdapter.ViewHolder myViewHolder; 

    if(convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.match_row, parent, false); 

     myViewHolder = new MatchAdapter.ViewHolder(); 

     myViewHolder.home_team_name = (TextView) convertView.findViewById(R.id.home_team_name); 
     myViewHolder.away_team_name = (TextView) convertView.findViewById(R.id.away_team_name); 
     myViewHolder.home_logo_view = (ImageView) convertView.findViewById(R.id.home_team_logo); 
     myViewHolder.away_logo_view = (ImageView) convertView.findViewById(R.id.away_team_logo); 
     myViewHolder.venue = (TextView) convertView.findViewById(R.id.venue); 
     myViewHolder.time = (TextView) convertView.findViewById(R.id.time); 
     convertView.setTag(myViewHolder); 

    } else { 
     myViewHolder = (ViewHolder) convertView.getTag(); 
    } 

    ImageLoader imageLoader = new ImageLoader(this.context, "com.myapps", R.drawable.team_logo); 

    imageLoader.DisplayImage("http://myapps.com/assets/images/logos/"+ entry.getHome_team_logo(), 
      myViewHolder.home_logo_view); 
    imageLoader.DisplayImage("http://myapps.com/assets/images/logos/" + entry.getAway_team_logo(), 
      myViewHolder.away_logo_view); 

    myViewHolder.home_team_name.setText(entry.getHome_team_name()); 
    myViewHolder.away_team_name.setText(entry.getAway_team_name()); 
    myViewHolder.venue.setText(entry.getVenue()); 
    myViewHolder.time.setText(entry.getTime()); 

    return convertView; 
} 

其他相关代码:

ImageLoader.class(我不希望这个问题变得太长滚动)

感谢您的帮助!

回答

0

我的猜测是下面的代码是

匹配条目= listMatch.get(位置);

太早。 ListView的getView是多线程的,它需要一些时间膨胀布局来转换视图。不知怎的,变量引用变得不正确。

呼叫匹配entry = listMatch.get(position);之后

其他{ myViewHolder =(ViewHolder)convertView.getTag(); }

+0

它不工作。 – 2013-03-15 07:57:24

+0

当你发现图像不正确,文本是否正确? – NyanLH 2013-03-15 08:01:24

+0

是的,文字显示正确。您可以在Google Play上获得我的应用程序进行测试。 https://play.google.com/store/apps/details?id=com.jadualbola。lite – 2013-03-15 08:13:47