CommonViewHolder中設置使用Glide設置ImageView報錯java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
代碼是在鴻洋老師的CommonAdapter的基礎上寫的,今天想把Glide引入項目中出現(xiàn)了自己處理不了的錯誤: 代碼結(jié)構(gòu)和調(diào)用是: public class GlideImageTestAct extends AppCompatActivity { ? ? ? ?....... ? ? ? gv.setAdapter(new CommonAdapter(this,datas,R.layout.simple_imageview_layout) { ? ? ? ? ? @Override ? ? ? ? ? public void convert(CommonViewHolder holder, String s) { ? ? ? ? ? ? ? holder.setImageURI(R.id.iv,s); ? ? ? ? ? } ? ? ? ?}); ? ? ? ?....... } public class CommonViewHolder { ? ? ? ?....... ? ? ? ?public CommonViewHolder setImageURI(int resId, String url) { ? ? ? ? ? if (TextUtils.isEmpty(url)) return this; ? ? ? ? ? ?ImageView imageView = getView(resId); Glide.with(mContext).load(url).centerCrop().placeholder(R.mipmap.default_image).error(R.mipmap.error_image).crossFade().into(imageView); ? ? ? ? return this; ? ? ? ? ?} ? ? ? ?....... } 運行報錯: ? ?E/AndroidRuntime: java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
2016-12-06
有個簡單的方法,不要讓ImageView成為根布局就可以了。這樣子就不會有Tag的相沖問題。
2016-09-27
nice 解決了問題
2015-11-23
經(jīng)過一天的研究問題已經(jīng)解決:
????????解決方式:
? ? ? ? ? ? ? ? 將原CommonViewHolder中:
????????????????????????public CommonViewHolder(Context mContext, int position, ViewGroup parent,int layoutId) ????????????????????????{
? ?????????????????????????????。。。。。。
? ?????????????????????????????mConvertView.setTag(this);
????????????????????????}
????????????????????????public static CommonViewHolder get(Context mContext, View convertView,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?。。。。。。
? ? ? ?????????????????????????CommonViewHolder holder = (CommonViewHolder) convertView.getTag();
? ? ? ????????????????????????? 。。。。。。
????????????????????????}
????????????????改為:? ?????
????????????????????????public CommonViewHolder(Context mContext, int position, ViewGroup parent,int layoutId)?
????????????????????????{
? ?????????????????????????????。。。。。。
? ?????????????????????????????mConvertView.setTag(R.string.app_name,this);
????????????????????????}
????????????????????????public static CommonViewHolder get(Context mContext, View convertView,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?。。。。。。
? ? ? ? ? ? ? ? ? ? ? ??CommonViewHolder holder = (CommonViewHolder) ????????????convertView.getTag(R.string.app_name);
? ? ? ??????????????????????????。。。。。。
????????????????????????}
????????分析原因:
????????????個人理解是因為我們在CommonViewHolder中的
????????????????public CommonViewHolder setImageURI(int resId, String url) {? ? ?
???????????????????。。。。。。。 ? ??????????????????????????????????????Glide.with(mContext).load(url).centerCrop().placeholder(R.mipmap.default_image)
????????.error(R.mipmap.error_image).crossFade().into(imageView);
??????????????????。。。。。。
????????????????}
????????????使用的Glide加載圖片的源碼中也使用了setTag和getTag模式而,與CommonViewHolder中所用的Tag符號發(fā)生了重復沖突,所以我們應運用setTag(int,Object)的方法設置Tag以避免重復(注:setTag此處的第一個參數(shù)必須是資源文件的生成的int符,如果任意填寫一個int數(shù)字則會報錯)。
?ps:上面屬于個人理解,如有錯誤歡迎指正。