Android - Glide的使用
2015-11-03 17:55
495 查看
Glide setTag崩溃问题
java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
- 原因:
and an Adapter which is using the usual ViewHolder pattern, i.e. inflating the view from resource (above) and setTag(vh);, now Glide wants to do the same when loading the image.
- 解决方案:
There could easily be a way to prevent conflicts, by allowing the ViewTarget users to set an ID to use with setTag(int, Object), even if it’s just a static method on ViewTarget (default beingView.NO_ID -> setTag(Object)).
问题代码:
@Override
public
View getView(final
int
position, View view, ViewGroup container) {
final
ViewHolder holder;
if
(view == null)
{ holder = new
ViewHolder();
view = holder.imageView =
new
ImageView(context);
holder.imageView .setLayoutParams(new
ViewGroup.LayoutParams(-1,
-1));
holder.imageView.setScaleType(ImageView.ScaleType.FIT_XY);
view.setTag(holder);
}
else
{ holder = (ViewHolder) view.getTag();
}
Glide.with(context)
.load((String) this.imageIdList.get(getPosition(position)))
.centerCrop()
.placeholder(R.drawable.meinv)
.error(R.drawable.meinv)
.into(holder.imageView);
我这里没有使用R.资源。而是new了一个ImageView,所以它报错,大意是需要一个id。
后来我改成了这样:
@Override
public View getView(final int position, View view, ViewGroup container) {
final ViewHolder holder;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.imageitem, null);
holder = new ViewHolder();
holder.imageView = (ImageView) view.findViewById(R.id.img_player);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
Glide.with(context)
.load((String) this.imageIdList.get(getPosition(position)))
.centerCrop()
.placeholder(R.drawable.meinv)
.error(R.drawable.meinv)
.into(holder.imageView);
就可以了
java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
- 原因:
and an Adapter which is using the usual ViewHolder pattern, i.e. inflating the view from resource (above) and setTag(vh);, now Glide wants to do the same when loading the image.
- 解决方案:
There could easily be a way to prevent conflicts, by allowing the ViewTarget users to set an ID to use with setTag(int, Object), even if it’s just a static method on ViewTarget (default beingView.NO_ID -> setTag(Object)).
问题代码:
@Override
public
View getView(final
int
position, View view, ViewGroup container) {
final
ViewHolder holder;
if
(view == null)
{ holder = new
ViewHolder();
view = holder.imageView =
new
ImageView(context);
holder.imageView .setLayoutParams(new
ViewGroup.LayoutParams(-1,
-1));
holder.imageView.setScaleType(ImageView.ScaleType.FIT_XY);
view.setTag(holder);
}
else
{ holder = (ViewHolder) view.getTag();
}
Glide.with(context)
.load((String) this.imageIdList.get(getPosition(position)))
.centerCrop()
.placeholder(R.drawable.meinv)
.error(R.drawable.meinv)
.into(holder.imageView);
我这里没有使用R.资源。而是new了一个ImageView,所以它报错,大意是需要一个id。
后来我改成了这样:
@Override
public View getView(final int position, View view, ViewGroup container) {
final ViewHolder holder;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.imageitem, null);
holder = new ViewHolder();
holder.imageView = (ImageView) view.findViewById(R.id.img_player);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
Glide.with(context)
.load((String) this.imageIdList.get(getPosition(position)))
.centerCrop()
.placeholder(R.drawable.meinv)
.error(R.drawable.meinv)
.into(holder.imageView);
就可以了
相关文章推荐
- Android Studio中使用AIDL
- Android中ProgressBar、RatingBar、SeekBar三种进度条的区别(十一)
- android editText 软键盘enter键图标的设置
- Android Studio快捷键
- Android中Spinner控件的使用(十)
- Android启动页面制作
- Android开发自学笔记(Android Studio) 目录
- 第二章 安卓基础学习
- 解决Android studio 启动报错java.lang.RuntimeException: java.lang.IllegalArgumentException
- Android之Activity的几种跳转方式
- Android上跑单元测试
- Android系统集成Google Maps和Google Search apk注意事项
- 安卓开发中的双日期选择控件(可隐藏日,只显示年月)
- Android TouchEvent事件传递机制
- android 修改project package name
- android studio 所打开的,所有文件的标题栏没有了,或者是被移动了,完美解决方案。
- 自定义Android软键盘enter事件
- Android中DrawerLayout控件的使用
- android防止搜索按钮连续点击加载多次数据
- AndroidStudio项目上传到SVN中需要忽略的文件