Android: ImageView.setImageResource 在 gridviewadapter 中显示不正确
Android: ImageView.setImageResource is not displaying correct in gridviewadapter
我定义了一个 gridview 和 gridviewadapter 来选择图像。当 select 2 张或更多图片时,一切正常。但是,当我 select 1 时,位置 =1 被位置 = 0 中的图像覆盖,这只发生在第一次选择 1 个图像时。正在流动的是适配器中的 getView():
@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
错误显示:
enter image description here
正确显示:
enter image description here
xml 文件:
<?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>
setImageResource不能和setImageURL同时使用,有时setImageURL会覆盖setImageResource而导致显示错误。
如果你同时使用它们,你应该先设置ImageURL(null),然后使用setImageResource。
我定义了一个 gridview 和 gridviewadapter 来选择图像。当 select 2 张或更多图片时,一切正常。但是,当我 select 1 时,位置 =1 被位置 = 0 中的图像覆盖,这只发生在第一次选择 1 个图像时。正在流动的是适配器中的 getView():
@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
错误显示: enter image description here
正确显示: enter image description here
xml 文件:
<?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>
setImageResource不能和setImageURL同时使用,有时setImageURL会覆盖setImageResource而导致显示错误。 如果你同时使用它们,你应该先设置ImageURL(null),然后使用setImageResource。