java - ListView 在第一行显示错误的图像

标签 java android

我已经搜索过SO,并发现了4个类似的问题,但似乎这个问题是不同类型的。我也花了大约7个小时来解决这个单一的bug,并没有发现我哪里做错了。

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

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

尝试过的解决方案:
我发现只有一个解决方案,就是在 getView 方法的开头设置 ConvertView = null 。是的,它是有效的,imageView 显示正确,但导致其他问题和错误。滚动变得不顺畅,有时某些图像变得太小。

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

我的代码
MatchAdapter.类 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 (我不希望这个问题变得太长而无法滚动)

感谢您的帮助!

最佳答案

我的猜测是以下代码是

Match entry = listMatch.get(position);

太早了。 ListView的getView是多线程的,需要一些时间来膨胀布局以转换 View 。不知何故,变量引用变得不正确。

调用匹配条目 = listMatch.get(position);之后

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

关于java - ListView 在第一行显示错误的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15426946/

相关文章:

Android BroadCastReceiver 和 android.intent.action.PHONE_STATE 事件

Android WallpaperManager 缩放位图太小

java - 从 java 生成 HTML 最好用什么,但在 web 相关项目上用什么更好?

java - 自动转义引号

java - 如何安全地将 List 转换为 csv 字节数组?

java - 如何确定 Java Web 服务是 JAX-WS 还是 JAX-RPC

php - 为什么 php mysql update 返回成功但从未更新列?

java - SimpleDateFormat 在日期格式期间错误地向前滚动一年

android - 在 Listview 中模拟用户对 EditText 的触摸操作

java - ClassCastException : android. widget.RelativeLayout 无法转换为 android.widget.LinearLayout