Search code examples
androidgridviewgetview

Android: ImageView.setImageResource is not displaying correct in gridviewadapter


I define a gridview and gridviewadapter to choose images. When select 2 or more images, all work well. But, when I select 1, the position =1 is covered by images in positon = 0, and this only happen the first time to choose 1 image. Flowing is getView() in adapter:

 @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        L.d("mytest position ="+position+ "converView ="+convertView);
        Holder holder;
        if (convertView == null) {
            holder = new Holder();
            convertView = mInflater.inflate(R.layout.grid_view_item, null);
            holder.mSelectImage = (NGImageView) convertView.findViewById(R.id.iv_icon);
            convertView.setTag(holder);
        } else {

            holder = (Holder) convertView.getTag();
        }
        if (getData().size() > 0 && position != getData().size()) {
            holder.mSelectImage.setVisibility(View.VISIBLE);
            ImageItem imageItem = getData().get(position);
            if (imageItem != null) {
                if (imageItem.getImageUri().toString().startsWith("http")) {
                    loadNGImageView.LoadOptionsView(imageItem.getImageUri().toString(),holder.mSelectImage);

                } else {
                    String imgUrl = BitmapUtil.IMAGE_URI_SUFFIX_SDCARD + imageItem.getImageUri().getPath();
                    L.d("mytest LoadOptionsView");
                    loadNGImageView.LoadOptionsView(imgUrl,holder.mSelectImage);
                }
            }
        } else {
            if (position == TopicPostFragment.DEFAULT_PHOTO_COUNT) {
                holder.mSelectImage.setVisibility(View.GONE);
            } else {
                holder.mSelectImage.setVisibility(View.VISIBLE);
                L.d("mytest setImageResource");
                holder.mSelectImage.setImageResource(R.drawable.guild_icon_img);
            }

        }

        return convertView;
    }

error logs:
mytest position =0  converView =null
mytest setImageResource

mytest position =0  converView =android.widget.FrameLayout{42cd7de8 V.E.....    
......I. 0,0-0,0 #7f0b0113 app:id/fl_item}
mytest setImageResource

                     ......

mytest position =0   converView =android.widget.FrameLayout{42eabc00 V.E..... 
........ 0,0-90,90 #7f0b0113 app:id/fl_item}
mytest LoadOptionsView

mytest position =1   converView =android.widget.FrameLayout{42cd7de8 V.E.....  
......I. 0,0-0,0 #7f0b0113 app:id/fl_item}
mytest setImageResource

error display: enter image description here

correct display: enter image description here

xml file:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fl_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center">
    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:scaleType="centerCrop"
    />
</FrameLayout>

Solution

  • setImageResource cannot be used with setImageURL at the same time, sometimes setImageURL may cover setImageResource and make the wrong display. if you use them at the same time ,you should first setImageURL(null) ,then use setImageResource.