其他分享
首页 > 其他分享> > android – 使用“if(convertView == null)”时GridView和图标混乱

android – 使用“if(convertView == null)”时GridView和图标混乱

作者:互联网

我是这个领域的新手,所以请耐心等待:)

我正在使用一些LayoutInflater来设置带有图标文本的GridView.当我使用如下时,一切都很顺利.但当我删除评论标记“//”时,一切都搞砸了.图标以错误的顺序显示,甚至在很少的地方加倍.

    View v;
//    if (convertView == null) {  // if it's not recycled, initialize some attributes
        LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.icon, null);
        TextView tv = (TextView)v.findViewById(R.id.icon_text);
        tv.setText(kraj[position]);
        ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
        iv.setImageResource(mThumbIds[position]);
        iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
        iv.setLayoutParams(new LinearLayout.LayoutParams(mniejszy, mniejszy));
//    } else {
    //    v = (View) convertView;
//    }
    return v;

这是我从以下代码获得的部分代码的教程:
http://developer.android.com/guide/topics/ui/layout/gridview.html

解决方法:

这种情况正在发生,因为你只在convertView为null时才设置图像(例如当GridView首次显示在屏幕上时会发生这种情况),并且当GridView滚动时(convertView不会为null)它会回收行视图,所以你最终会得到您没有使用新图像/文本更新的旧行.你的代码应该是这样的:

View v;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.icon, null);            
    } else {
       v = (View) convertView;
    }
    TextView tv = (TextView)v.findViewById(R.id.icon_text);
    tv.setText(kraj[position]);
    ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
    iv.setImageResource(mThumbIds[position]);
    iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
    iv.setLayoutParams(new LinearLayout.LayoutParams(mniejszy, mniejszy));
    return v;

标签:android,gridview,layout-inflater
来源: https://codeday.me/bug/20190629/1329722.html